为什么即使状态没有在商店中更改,Redux Store也会向侦听器发布更改?

时间:2017-10-21 20:44:12

标签: reactjs redux react-redux

使用简单的Redux API代码:

    // Dummy Reducer that just returns previous state
    const counter = (state = 0, action) => {
      return state;
    } 

    // Store
    const { createStore } = Redux;
    const store = createStore(counter);

    const listener = () => {
      console.log('Listener called...with ' + store.getState());
    };

    // Listener
    store.subscribe(listener);

    // Manually dispatching actions
    store.dispatch({ type: 'DUMMY' });
    store.dispatch({ type: 'DUMMY' });
    store.dispatch({ type: 'DUMMY' });

产生以下输出:

Listener called...with 0
Listener called...with 0
Listener called...with 0

我的问题: 如果商店中没有任何变化,为什么监听器会被通知,好像有什么变化。不是不必要的,反效果好吗?可以说,听众是像React Container Components这样的观点。他们会尝试不必要地重新投降吗?

或者我错过了什么?

对于Flux,我觉得我们在是否从商店发布更改方面具有更高的灵活性。这是Redux over Flux的骗局吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

根据the docsstore.subscribe()

  

添加更改侦听器。每次调度动作时都会调用它,状态树的某些部分可能会发生变化。

许多(大多数?)流行的redux模式不需要开发人员使用store.subscribe()。见react-redux和redux-saga。

但是,store.subscribe是否影响此类框架的性能是一个很好的问题。

使用react-redux(最受欢迎的反应还原框架),容器组件不会像http请求那样执行长时间运行的任务。这些通常由派遣的行动处理。因此容器组件往往具有非常高的性能,只需将数据从商店中的简单对象中拉出即可。当它们的输出没有改变时,相关的视图组件将不会重新渲染。