Answers:
this.state.myArray.push('new value')
返回扩展数组的长度,而不是数组本身。Array.prototype.push()。
我猜您希望返回的值是数组。
似乎这是React的行为:
切勿直接更改this.state,因为之后调用setState()可能会替换您所做的更改。将此this.state视为不可变的。React.Component。
我猜,您会这样做(不熟悉React):
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
setState()
将更改状态加入组件状态,并告诉React该组件及其子级需要使用更新后的状态重新呈现。 因此,我想它只是在设置之后没有更新。您能否发布一个代码示例,在哪里可以看到您正在设置和记录的代码点?
.concat('new value');
应该是 .concat(['new value']);
concat()
方法完全有效。请参阅:developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/…(要连接到新数组中的数组和/或值。)
使用es6可以像这样完成:
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
this.props
和this.state
可异步更新,你不应该依赖于它们的值来计算下一个状态。” 在修改数组的情况下,由于数组已经作为属性存在,this.state
并且您需要引用其值以设置新值,因此您应该使用setState()
接受具有前一状态的函数作为参数的形式。例如:this.setState(prevState => ({ myArray: [...this.state.myArray, 'new value'] }));
请参见:reactjs.org/docs/...
绝不建议直接更改状态。
在更高版本的React中,建议的方法是在修改状态以防止竞争情况时使用updater函数:
将字符串推到数组的末尾
this.setState(prevState => ({
myArray: [...prevState.myArray, "new value"]
}))
将字符串推送到数组的开头
this.setState(prevState => ({
myArray: ["new value", ...prevState.myArray]
}))
将对象推到数组的末尾
this.setState(prevState => ({
myArray: [...prevState.myArray, {"name": "object"}]
}))
将对象推送到数组的开头
this.setState(prevState => ({
myArray: [ {"name": "object"}, ...prevState.myArray]
}))
this.setState((prevState) => ({ myArray: [values, ...prevState.myArray], }));
您根本不应该运行状态。至少不是直接。如果要更新阵列,则需要执行以下操作。
var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);
直接在状态对象上工作是不可取的。您还可以查看React的不变性助手。
.slice()
创建新数组并保留不可变性。谢谢您的帮助。
该代码对我有用:
fetch('http://localhost:8080')
.then(response => response.json())
.then(json => {
this.setState({mystate: this.state.mystate.push.apply(this.state.mystate, json)})
})
fetch(`api.openweathermap.org/data/2.5/forecast?q=${this.searchBox.value + KEY} `) .then( response => response.json() ) .then( data => { this.setState({ reports: this.state.reports.push.apply(this.state.reports, data.list)}); });
this.state = { reports=[] }
... pls我想知道我在做什么错
在这里,您不能将对象推入这样的状态数组。您可以按自己的方式在常规数组中进行推送。在这里,您必须设置状态,
this.setState({
myArray: [...this.state.myArray, 'new value']
})
console.log(this.state.myArray)
的时候,总是落后一步。知道为什么吗?