React的setState突变变量

时间:2019-02-21 09:02:38

标签: reactjs state

非常奇怪的行为,很可能是我的代码中的错误:

我得到一个API响应对象(json),当我使用该对象的属性之一作为值的setState时,该对象发生了变化。我以为这是后端或提取方法的问题,但事实证明并非如此。

代码通常如下:

fetch(this.props.url, {
    method: 'POST',
    body: JSON.stringify({
        class: 'property',
        action: 'view', 
        objectId: this.props.element.id,
        token: this.props.token,
    }),
})
    .then(response => response.json())
    .then(json => {
        this.setState({
            property: json.property
        });
        console.log(json);
    })

我应该得到的:

{
        property: {
            units: {
                {
                    id: 31,
                    ...
                },
                {
                    id: 33,
                    ...
                }
            }
        }
    }

{

我实际上得到的是:

    property: {
        units: {
            {
                id: 33,
                ...
            },
            {
                id: 33,
                ...
            }
        }
    }
}

毋庸置疑,来自后端的响应带有正确的ID,这些ID是唯一的。

任何想法我可能做错了什么?这不应该发生,是吗? json变量如何变化?

谢谢。

1 个答案:

答案 0 :(得分:0)

好,发现我的错误。坦白地说,这非常令人困惑,我认为这不应该是设计使然,而是:

一旦我将state.property设置为json.property,我会将state.property作为prop传递给子元素。在该子元素中,我正在使用props.property进行一些过滤和映射,并且在比较过滤函数中的id时,有一次我错误地使用了单个等号(=)而不是双号(==)。

显然,这设置了错误的ID,并一直返回到初始json响应(因此,过滤器功能->子元素属性->“父元素状态?”-> json响应)。因此,请谨慎使用过滤器功能,除非您想花几天时间跟踪不可能的事情。