为什么Redux.js在init上多次启动reducer功能?

Jaa*_*rhu 23 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 state;
  }
}

const BlockGeneratorReducer = combineReducers({

  blocksFunc,
});

export default BlockGeneratorReducer;
Run Code Online (Sandbox Code Playgroud)

我成功更新了状态,但在登录时,我在页面加载时得到以下信息:

blocksFunc()类型:"@@ redux/INIT"

blocksFunc()类型:"@@ redux/PROBE_UNKNOWN_ACTION_b.f.4.qyoav2.t.9"

blocksFunc()类型:"@@ redux/INIT"

所以使用默认的action.type启动了三次blocksFunc函数.行动类型"@@ redux/INIT"在何时启动?"@@ redux/PROBE_UNKNOWN_ACTIOM"可以参考什么?

完整的源代码可以在git上找到:https://github.com/JaakkoKarhu/redux-react-blockgenerator

工作演示上传到我的服务器:http://jaakkokarhu.com/playground/redux-block-generator/

自从React和Redux成为新用户以来,关于源代码的所有其他评论也非常受欢迎.

编辑:

blocksFunc()根据DavidWalshes的建议编辑.

Jaa*_*rhu 37

@@ redux/INIT故意启动两次.第一次是测试combineReducers,第二次是实际的init:https://github.com/reactjs/redux/issues/382

正如TenorB在问题评论中指出的那样,@@ redux/PROBE_UNKNOWN_ACTION也是为了测试而启动的.

毕竟,这些事件并非偶然发起.

  • 好的,所以答案是“这是默认行为”。那是对的吗? (3认同)
  • @EliseChant 据我所知,是的。 (3认同)