非常奇怪的行为,很可能是我的代码中的错误:
我得到一个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变量如何变化?
谢谢。
答案 0 :(得分:0)
好,发现我的错误。坦白地说,这非常令人困惑,我认为这不应该是设计使然,而是:
一旦我将state.property设置为json.property,我会将state.property作为prop传递给子元素。在该子元素中,我正在使用props.property进行一些过滤和映射,并且在比较过滤函数中的id时,有一次我错误地使用了单个等号(=)而不是双号(==)。
显然,这设置了错误的ID,并一直返回到初始json响应(因此,过滤器功能->子元素属性->“父元素状态?”-> json响应)。因此,请谨慎使用过滤器功能,除非您想花几天时间跟踪不可能的事情。