尝试从操作/缩减器调用操作但没有成功。我知道这是一个反模式,但我想自定义日志(将有一个日志视图)的应用程序中发生的事情。视图将列出这些项目。
运行时我收到错误:
减速机可能不会发送行动
如果我理解正确,我应该使用演员,但却找不到好的例子。 有关如何使用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
现在代码示例正常工作。
答案 0 :(得分:2)
如果您想发送非原始操作,则需要redux-thunk Redux还有nice example正在使用这个thunkMiddleware。
如果您只想记录状态更改,可以使用Chrome Redux plugin来使用这个简单的redux-logger中间件。
或撰写您自己的custom middleware