反应事件处理程序。向数组添加值

还有祖兹维奇

为什么选择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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章