首页 文章

将native redux mapStateToProps状态更新但不重新呈现presenter组件

提问于
浏览
1

问题是 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商店值 .

任何进一步的调试建议或推荐的解决方案将不胜

1 回答

  • 0

    尝试在reducer中写这个:

    const sessionReducer = (state=initialState, action) => {
        switch (action.type) {
            ...
            case Types.ACTION_TO_HANDLE:
                    return Object.assign({}, state, {
                        ...state,
                        session: {
        ...state.session,
       toUpdate: {
                        success: action.success,
                        processing: action.processing,
                        message: action.message,
                    },
               }
           })
    
        }
    }
    

相关问题