2016-10-06 2 views
1

Я использую Redux и хотел бы динамически включать все файлы в каталог.React Native - Dynamically List/Require Files In Directory

/redux/index.js

// Actions 

import * as authActions from './auth/authActions'; 
import * as deviceActions from './device/deviceActions'; 
import * as globalActions from './global/globalActions'; 
import * as menuActions from './menu/menuActions'; 
... etc 

export const actions = [ 
    authActions, 
    deviceActions, 
    globalActions, 
    menuActions, 
... 
]; 

// Reducers 

import auth from './auth/authReducer'; 
import device from './device/deviceReducer'; 
import global from './global/globalReducer'; 
import menu from './menu/menuReducer'; 
... 

import { combineReducers } from 'redux'; 

export const rootReducer = combineReducers({ 
    auth, 
    device, 
    global, 
    menu, 
... 
}); 

В приведенном выше (упрощенным), например, все файлы структуры:

/redux/ 
    /auth/ 
    authActions.js 
    authReducer.js 
    /device/ 
    deviceActions.js 
    deviceReducer.js 
    /global/ 
    globalActions.js 
    globalReducer.js 
    /menu/ 
    menuActions.js 
    menuReducer.js 
    ... 

В этом index.js файле, было бы гораздо легче поддерживать, если Я мог динамически читать все каталоги в каталоге redux и динамически требовать, чтобы действия и редукторы экспортировались.

В обычной среде узла, я хотел бы сделать что-то вроде (не тестировалось, но иллюстрирует пример):

import fs from 'fs' 
import path from 'path' 
import { combineReducers } from 'redux' 

let actions = [] 
let reducers {} 

fs 
    .readdirSync(__dirname).filter((file) => { 
    // Only directories 
    return fs.statSync(path.join(__dirname, file)).isDirectory(); 
    }) 
    .forEach((module) => { 
    const moduleActions = require(path.join(__dirname, module, `${module}Actions.js`); 
    const moduleReducer = require(path.join(__dirname, module, `${module}Reducer.js`); 

    actions.push(moduleActions) 
    reducers[module] = moduleReducer.default 
    }); 

export actions 
export const rootReducer = combineReducers(reducers) 

Вопрос заключается в том, что fs модуль не является вещью в реагировать родной быть способный динамически перебирать каталоги в кодовой базе. Существует реакция-native-fs, но для фактического доступа к файловой системе на устройстве (после компиляции приложения) [я думаю?]. Вышеупомянутое намного более чистое, чем индивидуально, требующее всех действий и редукторов, и указывая их в массиве действий и редукторе.

Любые идеи?

ответ

2

Динамическая загрузка модулей не поддерживается в режиме реагирования. Все файлы javascript объединены в один файл js.