2016-08-04 8 views
1

アクション/レデューサーからのアクションの呼び出しは成功しません。私はこれがアンチパターンであることを知っていますが、アプリで何が起こっているのかをカスタムログに記録したい(ログビューがあります)。ビューにこれらの項目がリストされます。これを実行するときレデューサーからのコールロガーアクションへの対応

私はエラーを取得する:私はそれを正しく理解していれば

Reducers may not dispatch actions

私は役者を使用する必要がありますが、良い例を見つけることができません。レデューサーとアクションからトリガすることができるカスタムロガーは(コンポーネントから正常に動作します)を作る方法についての の任意の提案

アクション/ log.js

version.js

import {appError} from './index'; 
import moment from 'moment' 
import {store} from '../containers/app'; 

// ------- LOG WHATS HAPPENING ------- 
export const LOG_ADD = 'LOG_ADD'; 

export function logAdd(item){ 
    return { 
     type: LOG_ADD, 
     item: item 
    } 
} 

export function triggerLog(log){ 
    return function (dispatch, getState) { 
    dispatch(logAdd(log)); 
    } 
} 

export const LOG_ITEM_ERROR = "logerror"; 
export const LOG_ITEM_NOTIFY = "lognotify"; 

export class Log { 

    constructor(type,title,msg1,msg2) { 
    this.date = moment().unix(); 
    this.type = type; 
    this.title = title; 
    this.msg1 = msg1; 
    this.msg2 = msg2; 
    } 

    static error(title,msg1,msg2){ 
    dispatch(triggerLog(new Log(LOG_ITEM_ERROR,title,msg1,msg2))); 
    } 

    static notify(title,msg1,msg2){ 
    store.dispatch(triggerLog(new Log(LOG_ITEM_NOTIFY,title,msg1,msg2))); 
    } 

} 

リデューサー/

export default function version(state = initialVersion,action){ switch(action.type){ case VERSION_RESPONSE: if(action.json.UpdateRequired){ console.log("FORCE UPDATE"); Log.error('Version','Force update'); //@TODO make sure app gets updated return; } Log.notify('Version','Check complete'); return Object.assign({}, state, { isDone: true, isFetching: false, isValid: true }) 

SOLUTION

01反応ネイティブする 0.30をアップグレード

はアクションでの発送を使用しないでください:

export function getVersion() { 
    return function (dispatch, getState) { 
     dispatch(mycall()); // <-- do not do this 

は今のコード例は動作します。

+0

redux devtoolsは適していませんか? –

+0

より明確に指定します。これは開発ログ用ではなく、本番用です。これらのログが表示されるビューがアプリに表示されます。 – roady

答えて

1

非プリミティブアクションをディスパッチする必要がある場合redux-thunk ReduxにはこのthunkMiddlewareを使用しているnice exampleもあります。

状態の変更をログに記録する場合は、この単純なredux-loggerミドルウェアを使用するとChrome Redux pluginを使用できます。

またはcustom middleware

+0

より明確に指定します。これは開発ログ用ではなく、本番用です。これらのログが表示されるビューがアプリに表示されます。 私はカスタムミドルウェアを作成する必要があり、その中に多くのスイッチがあり、状態がログに記録できるようになっていますか? – roady

関連する問題