アクション/レデューサーからのアクションの呼び出しは成功しません。私はこれがアンチパターンであることを知っていますが、アプリで何が起こっているのかをカスタムログに記録したい(ログビューがあります)。ビューにこれらの項目がリストされます。これを実行するときレデューサーからのコールロガーアクションへの対応
私はエラーを取得する:私はそれを正しく理解していれば
Reducers may not dispatch actions
私は役者を使用する必要がありますが、良い例を見つけることができません。レデューサーとアクションからトリガすることができるカスタムロガーは(コンポーネントから正常に動作します)を作る方法についての の任意の提案
アクション/ log.js
version.jsimport {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
は今のコード例は動作します。
redux devtoolsは適していませんか? –
より明確に指定します。これは開発ログ用ではなく、本番用です。これらのログが表示されるビューがアプリに表示されます。 – roady