问题是 mapDispatchToProps
中的状态似乎正在更新,但组件不会重新渲染以反映这些更改,即使...
-
presenter组件正确连接到redux操作(可以通过
mapDispatchToProps
成功初始化props并在任何情况下调用mapDispatchToProps
函数) -
处理被调用的redux动作的redux reducer正在不可改变地更新状态(让我怀疑那是问题(https://github.com/reduxjs/redux/issues/2190#issuecomment-271109542)),即 . reducer代码看起来像
const initialState = {
session: {
...
toUpdate: {success: false, processing: false, message: ''},
...
},
someOtherStateSections: {...},
...
}
const sessionReducer = (state=initialState.session, action) => {
switch (action.type) {
...
case Types.ACTION_TO_HANDLE:
console.log(`REDUCER: ACTION_TO_HANDLE: check that state is being updating with intended values:\n${JSON.stringify(action, null, 2)}`)
return Object.assign({}, state, {toUpdate: {
success: action.success,
processing: action.processing,
message: action.message,
}})
...
}
}
const rootReducer = combineReducers({
session: sessionReducer,
...
})
export default rootReducer;
- 从reducer更新后,日志记录语句显示为
state
arg . 在mapStateToProps
函数中正在更新以反映这些更改 . 代码片段看起来像
const mapStateToProps = (state, ownProps) => {
console.log(`PickupLocationAnchorFormContainer: mapStateToProps: ${JSON.stringify(state.session.pickupLocationAnchorChangeStatus, null, 2)}`)
return {
toUpdate: state.session.toUpdate,
ownProps: ownProps,
}
}
const mapDispatchToProps = (dispatch,) => {
return {
someThunk: (some, inputs) => {
dispatch(someThunk(some, inputs))
},
}
}
const MyComponentContainer = connect(
mapStateToProps,
mapDispatchToProps
)(MyComponent)
export default MyComponentContainer
但 MyComponent
似乎没有更新其 this.props.toUpdate
以更新更新的redux商店值 .
- 并且更新后的状态值与旧值不同(在此示例中,
toUpdate.success
设置为false
至true
),这使我怀疑问题与浅等式检查有关(请参阅https://redux.js.org/faq/reactredux#why-isnt-my-component-re-rendering-or-my-mapstatetoprops-running)(尽管无法解析)到目前为止的bug,所以我知道什么,对吧?)
任何进一步的调试建议或推荐的解决方案将不胜
1 回答
尝试在reducer中写这个: