Javascript 为什么Redux.js在init上多次启动reducer函数?
学习Redux.js并构建演示应用程序 我有一个这样的减速器:Javascript 为什么Redux.js在init上多次启动reducer函数?,javascript,reactjs,redux,Javascript,Reactjs,Redux,学习Redux.js并构建演示应用程序 我有一个这样的减速器: // Imports here function blocksFunc(state = [], action) { switch (action.type) { case 'ADD_BLOCK': _id++; return [...state, {'_class' : 'basic', '_id' : _id }]; default: state = []; return s
// Imports here
function blocksFunc(state = [], action) {
switch (action.type) {
case 'ADD_BLOCK':
_id++;
return [...state, {'_class' : 'basic', '_id' : _id }];
default:
state = [];
return state;
}
}
const BlockGeneratorReducer = combineReducers({
blocksFunc,
});
export default BlockGeneratorReducer;
我成功地更新了状态,但在记录时,当页面加载时,我会得到以下信息:
blocksFunc()类型:“%redux/INIT”
blocksFunc()类型:
“@@redux/PROBE\u UNKNOWN\u ACTION\u b.f.4.q.y.o.a.v.2.t.9”
blocksFunc()类型:“%redux/INIT”
因此,blocksFunc函数使用默认的action.type启动了三次。在哪些情况下启动操作类型“@@redux/INIT”?“@@redux/PROBE\u UNKNOWN\u ACTIOM”在中可能指什么
可以在git上找到完整的源代码:
工作演示已上载到我的服务器:
由于是React和Redux的新版本,因此关于源代码的所有其他评论也都非常受欢迎
编辑:
blocksFunc()是根据DavidWalshes的建议编辑的。@@redux/INIT是故意启动两次的。第一次用于测试组合传感器,第二次用于实际初始化: 正如TenorB在问题评论中指出的那样,“为了测试目的,还启动了。@@redux/PROBE_UNKNOWN_”操作
因此,毕竟,这些事件不是意外启动的。点是扩展运算符。它将数组中的元素拆分为单独的参数。e、 g.f(…[a,b,c])是f(a,b,c)的等价物。不要使用state.push()。你绝不能在Redux中改变你的状态。您应该有:return[…state,{''u class':'basic','u id':'u id}];当遇到未知操作时,为什么要将状态设置为空数组?@TenorB哦,实际上没有理由这样做,这也没什么大不了的,因为这个演示只是为了好玩。不过,说得好,我以前根本没想过。看看为什么要发送探测动作。目的是测试减速器是否正确处理未知动作。那么,答案是“这是默认行为”。是吗?@EliseChant据我所知,是的。