代码之家  ›  专栏  ›  技术社区  ›  lampShadesDrifter

react native redux MapStateTrops状态更新,但不重新呈现演示器组件

  •  1
  • lampShadesDrifter  · 技术社区  · 7 年前

    国家在哪里有问题 mapDispatchToProps 似乎正在更新,但组件不会重新渲染以反映这些更改,即使。。。

    • 演示者组件已正确连接到redux操作(可以成功 初始化 道具通过 mapDispatchToProps 打电话 mapDispatchToProps 功能(在任何情况下)
    • 处理redux操作的redux reducer正在不可变地更新状态(这让我怀疑这是问题所在)( https://github.com/reduxjs/redux/issues/2190#issuecomment-271109542 )),即,减速器代码如下所示
    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 阿格。在 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 回复  |  直到 7 年前
        1
  •  0
  •   avani kothari    7 年前

    试着在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,
                    },
               }
           })
    
        }
    }