【问题标题】:Property doesn't update after firing redux dispatch触发 redux 调度后属性不更新
【发布时间】:2020-12-01 21:26:01
【问题描述】:

几个小时后我不得不寻求帮助,我的 useEffect 并不总是适用于 redux 调度操作。

const ScreenA = { currentItem, updatedItem } => {

    useEffect(() => {
        if (currentItem.id === updatedItem.id) { // Do stuff } 
    }, [updatedItem]) // XX Is not changing 

... // do stuf

    const mapStateToProps = (state) => {
        console.log("AAABB ScreenA.mapStateToProps updatedItem: ", state.updatedItem) // XX I receive new updated id!! but it doesn't change the prop.updatedItem for ScreenA and useEffect is not calling. 
        return {
            updatedItem: state.updatedItem,
        }
    }

export default connect(mapStateToProps)(FeedScreen)
}

我的减速机 更新

const initialState = {
    updatedItem: undefined,
}

export default (state = initialState, action) => {
    switch (action.type) {
        case ITEM_CHANGED:
            console.log("AAABB reducer.addChangedItem.ITEM_CHANGED: " + action.t) // Is printing after every dispatch call

            return {
                ...state,
                updatedItem: action.updatedItem,
            }

            // I tried also with 
            return {  
                updatedItem: action.updatedItem,
            }

        default:
            return state
    }
}

奇怪的是,如果我将更改操作从 ScreenB 发送到 ScreenA 而不是在 ScreenC 到 ScreenA 之间发送,它会起作用。 (这与我发送操作的方式相同。

【问题讨论】:

  • 需要查看你的reducer,可能是突变问题
  • @JoeLloyd 已更新。

标签: reactjs react-native redux react-redux use-effect


【解决方案1】:

也展开你更新的项目

由于您更新的项目是一个可能导致突变的对象。似乎不太可能,但这是您在不使用平面数据时面临的问题。通常,您在 redux 中的操作也会有 type 和 payload(未更新的项目)。

return {
  ...state,
  updatedItem: {...action.updatedItem},
}

如果这不起作用,则可能是您的 useEffect 中的某些内容已损坏,您需要在那里登录并显示结果。

【讨论】:

  • 哇,它的工作,我需要更多的测试,但看起来我今天有一个新英雄,谢谢。
  • @A.Amini 没问题,只是一些关于在你的状态中更新“深层”对象的建议。您应该避免这种情况,并尽量保持数据平坦以避免此类问题。
猜你喜欢
  • 2016-06-30
  • 1970-01-01
  • 2018-01-06
  • 2017-01-24
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
相关资源
最近更新 更多