2016-10-06 4 views
1

私はReduxを使用しており、ディレクトリ内のすべてのファイルを動的にインクルードしたいと考えています。上記(簡体字)の例ではReact Native - ディレクトリ内のファイルを動的に一覧表示する/要求する

/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ディレクトリ内のすべてのディレクトリを動的に読み取ることができ、動的にアクションとレデューサーをエクスポートする必要があります。通常のノード環境で

(テストしますが、一例を示していない)のように、私は何かをするだろう。問題はfsモジュールが反応し、ネイティブのように中のものではないということです

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) 

コードベース内のディレクトリを動的に反復することができます。 react-native-fsがありますが、それは実際にデバイス上のファイルシステムにアクセスするためです(アプリケーションがコンパイルされた後)[私は思いますか?]上記は、アクションとレデューサーのすべてを個別に要求し、それらをactions配列とレデューサーオブジェクトで指定するよりはるかにクリーンです。

アイデア?

答えて

2

モジュールの動的ローディングは、ネイティブではサポートされていません。すべてのjavascriptファイルが1つのjsファイルにバンドルされています。

関連する問題