我有一个组件,我通过connect
传递了一个mapStateToProps
参数,将一个prop this.props.mainBuffer
映射到我商店的一个状态树切片。当我更新状态的那部分时,只有组件不呈现。 (我意识到,redux的问题通常不会改变状态,但我觉得我已经这样做了。)
我的root(和唯一)reducer看起来像:
function rootReducer(state = {}, action) {
switch (action.type) {
case NEW_BUFFER:
return Object.assign({}, {mainBuffer: action.samples})
default:
return state;
}
}
连接组件连接如下:
export default connect((state) => ({
mainBuffer: state.mainBuffer
}))(WaveformVisualizer);
我已经和react-redux合作了几个星期了,这一直都有效。通常,如果我指定状态树state.MainBuffer
的一个切片并确保在reducer中不可更改地更新它,则该组件将触发渲染。但它不再发生,我不明白为什么。
答案 0 :(得分:1)
我相信我们在Reactiflux聊天频道中设法解决了这个问题。列出的示例代码并不十分准确 - 真正的代码正在执行Object.assign(state, {mainBuffer : action.samples})
,这正在改变现有状态。解决方案是实际传递一个新的空对象作为第一个参数,如Object.assign({}, state, {mainBuffer : action.samples})
。等效的对象传播使用量为return {...state, mainBuffer : action.samples}
。