从reducer反应调用记录器操作

时间:2016-08-04 08:51:46

标签: reactjs redux

尝试从操作/缩减器调用操作但没有成功。我知道这是一个反模式,但我想自定义日志(将有一个日志视图)的应用程序中发生的事情。视图将列出这些项目。

运行时我收到错误:

  

减速机可能不会发送行动

如果我理解正确,我应该使用演员,但却找不到好的例子。 有关如何使用reducers和actions触发自定义记录器的任何建议(从组件中正常工作)

动作/ log.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) ) );
  }

}

减速器/ version.js

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
            })

升级至反应原生0.30 不要使用调度:

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

现在代码示例正常工作。

1 个答案:

答案 0 :(得分:2)

如果您想发送非原始操作,则需要redux-thunk Redux还有nice example正在使用这个thunkMiddleware。

如果您只想记录状态更改,可以使用Chrome Redux plugin来使用这个简单的redux-logger中间件。

或撰写您自己的custom middleware