React组件不会在Redux状态更改时重新呈现

时间:2020-04-10 07:12:46

标签: reactjs redux react-redux

我正在基于与redux反应的PWA。我正在从使用symfony的REST-API构建中获取数据。 我注意到,如果我从API更新项目,则商店中的值会发生更改(已通过dev-tools检查),但该组件未重新呈现。我只是显示旧数据,直到刷新(存储是持久性的)。

如果我更改诸如“ isFetching”之类的一级变量,这似乎是可行的,我可以正确显示加载屏幕,并在获取完成后显示数据。但是,如果我更改了诸如“ item.title”之类的嵌套变量,它将无法正常工作。 我似乎对API没问题,这正是我注意到的地方。因此,我进行了以下测试,该测试应在更改标题时更改描述(仅查看是否发生了任何事情)。

我尝试的最后一件事是像这样构建减速器:https://redux.js.org/recipes/structuring-reducers/immutable-update-patterns#updating-nested-objects –但它仍然无法正常工作。我想念什么?

以下是我的更改操作的示例,对isDirty的更改会呈现,而对项目的更改不会呈现:

动作

export function changeProject(item) {
    return {
        type: CHANGE_PROJECT,
        meta: {
            id: item.id,
        },
        data: {
            item,
        }
    }
}

减速器

export default function projectById(state = {}, action) {

    if (action.type === CHANGE_PROJECT) {
        return {
            ...state,
            [action.meta.id]: {
                ...state[action.meta.id],
                isDirty: true,
                item: {
                    ...state[action.meta.id].item,
                    ...action.data.item,
                    description1: action.data.item.title,
                },
            }
        };
    }

     return state;
}

mapStateToProps

function mapStateToProps(state, ownProps) {

    const { projectById } = state
    const { isDirty, item } = projectById[
        ownProps.match.params.id
    ] || {
        item: {},
    }

    return {
        item,
        isDirty,
    };
}

0 个答案:

没有答案