javascript - 以状态存储数组中的项目
问题描述
所以我有一个 textarea,我想将 textarea 的项目存储在我在应用程序状态中创建的数组中。昨天代码运行得非常好,但我想我只是从事故中改变了一些东西,并且出现了这个错误。
代码收集 textarea 内的值,然后使用一个函数将数组的项目与 textarea 中写入的值连接起来,每当我单击按钮时。有 app.js 和 tasks.js 有 textarea 和按钮。
任务.js:
import React from 'react'
class Tasks extends React.Component {
constructor(props) {
super(props)
this.state = {
value: '',
}
}
handleChange = e => {
this.setState({ value: e.target.value })
}
render() {
return (<div>
<textarea value={this.state.value} onChange={this.handleChange} ></textarea>
<button onClick={() => this.props.onClick(this.state.value)}>Add task</button>
</div>)
}
}
export default Tasks
应用程序.js:
import React from 'react';
import Tasks from './tasks.js';
import './App.css';
class App extends React.Component {
state = {
todolist: []
}
addData(val) {
this.setState({todolist:this.state.todolist.concat(val)})
console.log(this.state.todolist)
}
render() {
return (
<div className="App">
<Tasks onClick={value => this.addData(value)} />
</div>
);
}
}
export default App;
当我添加第一个数组元素时,会出现错误,而不是存储项目。然后,当我添加第二个元素时,数组会存储第一个元素。当我添加第三个元素时,数组现在只包含第一个和第二个元素。我知道这一点,因为我在控制台中看到过
解决方案
您最初的问题有一个错误,您已通过该编辑进行了更正。现在唯一悬而未决的问题setState
可能是异步操作,因此您需要使用它的回调来检查更新后的状态。
addData(val) {
this.setState({
todolist: this.state.todolist.concat(val)
}, () => console.log(this.state.todolist))
}
推荐阅读
- wordpress - Azure 上的 Wordpress 错误:被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
- networking - 私有节点无法加入集群
- python-3.x - how can I create a button grid in pyqt5 similar to a calculator
- server - Netty,option()与childOption()?
- excel - how to use multiple criteria in AVERAGEIF function
- sql - 有没有办法将更快的有序 SQL TOP 1 查询作为实体框架查询?
- c++ - 继承:子方法引用父变量
- django - 在 jinja 模板中打印项目名称
- python - 返回一个介于两个行值之间的值(伪时间序列?)
- javascript - 阿波罗钩子超过了最大更新深度