javascript - 在状态数组中存储项目

标签 javascript reactjs

所以我有一个文本区域,我想将文本区域的项目存储在我在应用程序状态中创建的数组中。昨天代码运行得非常好,但我想我只是在事故中更改了一些东西,然后出现了这个错误。

代码收集文本区域内的值,然后每当我单击按钮时使用函数将数组的项目与文本区域中写入的值连接起来。有 app.js 和具有文本区域和按钮的 tasks.js。

任务.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 maybe an async operation ,所以你需要使用它的回调来检查它更新后的状态。

addData(val) {
  this.setState({
    todolist: this.state.todolist.concat(val)
  }, () => console.log(this.state.todolist))
}

关于javascript - 在状态数组中存储项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56867157/

相关文章:

javascript - 使用 webpack 转译 ES6 模块后,模块未导出

javascript - 为什么我提交时无法获取 POST/GET 文本框

javascript - 使用 jQuery 将 XML 加载到 JS 变量中,无需 JS 警报

javascript - 在 javascript 中重组复杂对象数组的最有效方法?

css - Jest 中导入的样式对象为空

javascript - 如何将按钮添加到无状态组件中?

javascript - ReactJS - 将 json 插入状态数组

javascript - 现在js : [RangeError: Maximum call stack size exceeded]

javascript - 交叉抓取和同构抓取有什么区别?

javascript - 在 setState() 之后 react 渲染删除的数组元素