动作创建者数据未正确同步

时间:2019-02-28 12:11:34

标签: javascript reactjs asynchronous redux

我有一个使用redux thunk的动作创建者,但发生了一些奇怪的事情

使用此代码:

export const updateShowing = name => {
    return (dispatch, getState) => {
        console.log(getState().codeToRender.contents, 'first consolelog')
        const paramFound = getState().codeToRender.contents.find(param => param.name === name)
        console.log(paramFound, 'second consolelog')
        dispatch({ type: UPDATE_SHOWING, name })
        dispatch(push(`?${updateParamHelper(getState)}`))
    }
}

当我在第一个console.log中查看时,我正在使用寻找的键render: true

获取对象

,但是第二个console.log(我所做的只是在同一数组上查找),由于某种原因,我在同一时间点得到render: false的意思,我什至看到了两个不同的值通过访问相同的getState

知道为什么会发生这种情况吗?

1 个答案:

答案 0 :(得分:0)

UPDATE_SHOWING或其他操作处理程序必须处于变异状态。您的console.log看起来有所不同,因为其中一个可能在登录时按原样显示元素,而另一个在扩展控制台时按原样显示。

尝试在控制台中运行以下内容:

const arr = [{name:'Ben'}];
console.log('expand and name is Jerry',arr);
console.log('as is when logged:',arr[0]);
arr[0].name='Jerry';

输出示例:

expand and name is Jerry  ▼[{…}]
                            ▶ 0:{name: "Jerry"}
                              length: 1
                            ▶ __proto__: Array(0)
as is when logged: {name: "Ben"}

您可以将console.logs更改为:

console.log(JSON.stringify(getState().codeToRender.contents,undefined,2), 'first consolelog');

您可能会发现第一和第二控制台日志的日志相同。