为什么选择Hello Javascript Wizards,
我真的开始深入研究React,不得不说,我觉得这很有趣。但是,在从输入表单中获取值并将其添加到数组中时,我遇到了一个问题。我正在构建一个小型应用程序(我的创造力如何),并且每次单击添加按钮时,我都尝试将输入字段中的值添加到数组中。
这是要解决的问题,它的工作原理很好,只是在第一次提交按钮时就没有效果。例如,假设我启动了应用程序,在输入字段中键入“ Hello”,然后按Enter。如您在我的代码中所看到的,该函数的末尾有一个console.log设置,因此我可以看到每次单击该按钮时发生的情况。
第一次单击该按钮时,我登录到控制台的所有内容都是“ []”,在下次单击时,我会看到我想要的内容,并在其中获得一条日志,指出“ [“ Hello”]。在此之后,我添加的任何其他输入都被添加到数组中。我觉得必须要进行一些细微的操作,可能需要一双更加老练的眼睛。对于可能的解决方案,以及我可以使代码变得更好的任何方式,我将不胜感激。
这是控制台的快速屏幕截图。第一次单击从[]部分开始。
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()不会立即使this.state突变,而是创建一个挂起的状态转换。调用此方法后访问this.state可能会返回现有值。
无法保证对setState的调用的同步操作,并且可以为提高性能而对调用进行批处理。
在setState的注释部分中,我的重点是粗体。因此setState
,不要立即改变状态。尽管当setState合并了新状态时,它将始终render
再次调用,因此ListItem
将不会同步,或者可能不是立即获取新任务。
console.log
向下移动到渲染函数,您将看到区别:
...
<ListItem tasks={this.state.tasks} />
{console.log(this.state.tasks)}
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句