使用简单的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的骗局吗?或者我错过了什么?
答案 0 :(得分:1)
根据the docs,store.subscribe()
:
添加更改侦听器。每次调度动作时都会调用它,状态树的某些部分可能会发生变化。
许多(大多数?)流行的redux模式不需要开发人员使用store.subscribe()
。见react-redux和redux-saga。
但是,store.subscribe
是否影响此类框架的性能是一个很好的问题。
使用react-redux(最受欢迎的反应还原框架),容器组件不会像http请求那样执行长时间运行的任务。这些通常由派遣的行动处理。因此容器组件往往具有非常高的性能,只需将数据从商店中的简单对象中拉出即可。当它们的输出没有改变时,相关的视图组件将不会重新渲染。