为什么你好Javascript向导,React事件处理程序。为阵列添加值
我真的开始深入到React,不得不说,我觉得它很有趣。但是,我在从输入表单中获取值并将其添加到数组中时遇到问题。我正在构建一个小应用程序(我的创意),并且每次单击添加按钮时,我都会尝试将输入字段中的值添加到数组中。
下面是捕获,它工作得很好,只是没有在按钮的第一次提交。例如,让我说我启动应用程序,在输入字段中输入“Hello”,然后按回车。正如你可以在我的代码中看到的,我在函数结尾处设置了一个console.log设置,以便每次点击按钮时都能看到发生了什么。
第一次单击按钮时,我所有登录到控制台的内容都是“[]”,在下一次单击时,我会看到我想要的内容,我在哪里看到日志说“[你好]”。之后我添加的任何其他输入都会被添加到数组中。我觉得必须有一些相当细微的事情,可能只需要更经验的一双眼睛。我很感谢任何关于可能的解决方案的反馈意见,也许我可以通过任何方式使代码更好。
以下是控制台的快速截图。第一次点击从[]部分开始。
import React, { Component } from 'react';
import ListItem from './list-item';
export default class App extends Component {
constructor(props) {
super(props);
this.state = { tasks: [] };
this.addTask = this.addTask.bind(this);
}
addTask(event) {
event.preventDefault();
var form = this._input.value;
var allTasks = this.state.tasks.concat([form]);
this.setState({tasks: allTasks});
console.log(this.state.tasks);
}
render() {
return (
<div className="app-main">
<div className="col-sm-12 text-center">
{/* App Title */}
<h1>Task App</h1>
<div id="formWrapper">
{/* Start of Form */}
<form onSubmit={this.addTask}>
<input ref={(el) => this._input = el} />
<button type="submit" className="btn btn-md btn-primary">Add</button>
</form>
{/* List Item */}
<ListItem tasks={this.state.tasks} />
</div>
</div>
</div>
);
}
}
记住'setState'需要一个回调函数作为可选的第二个参数。如果OP希望在事件发生后立即看到状态变化,他可以传递一个记录新状态的函数。 –
你们两个都应该获得Willy Wonka Javascript Factory的金票。这两个答案都非常有用,并且工作100%。 –