在React表单中,为什么我们要在输入标签中设置(例如)value = {this.state.task}?

代码

我不明白为什么当它只是一个空字符串时为什么要设置value = {this.state.task},以及数据流从输入值到状态的准确程度。

当我们第一次设置该值时,它基本上是一个空字符串。但是,当我尝试实际设置value =''时,输入字段在呈现的页面上无法正常工作。

我得到onChange,将状态设置为相应的名称和值,这就是数据流入状态的方式。但是为什么当我们再次设置value =''时为什么不起作用?

import React, { Component } from 'react';
import uuid from 'uuid/v4';

export class NewTodoForm extends Component {
  constructor(props) {
    super(props)
    this.state = {
       task: ""
    }
    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleChange(e){
    this.setState({
      [e.target.name]: e.target.value
    })
  }
  handleSubmit(e){
    e.preventDefault();
    this.props.createTodo({ ...this.state, id: uuid() });
    this.setState({ task: "" });
  }
  render() {
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <label htmlFor='task'>New Todo</label>
          <input
            type='text'
            placeholder='New Todo'
            id='task'
            name='task'
            // why is this {this,state.task} ?
            value={this.state.task}
            onChange={this.handleChange}
          />
          <button>Add Todo</button>
        </form>
      </div>
    )
  }
}

export default NewTodoForm
赫里斯托·埃涅夫(Hristo Enev)

因为value正在设置...输入的值。通过value={this.state.task}基本上做到这一点,您就可以将输入与组件的状态以及React组件的生命周期相连接。因此,基本上,无论何时,只要您更改组件状态的状态即可从任何地方(甚至以编程方式)获得输入,React将能够正确更新输入,并且不会发生任何错误或奇怪的事情。

React文档中对此进行了很好的解释。他们正在做这个受控组件...

其值由React这样控制的输入表单元素称为“受控组件”。

...从而使React组件的状态成为唯一的“真理来源”,这意味着可以防止出现怪异的错误和不良行为。

由于value属性是在表单元素上设置的,因此显示的值将始终为this.state.value,从而使React状态成为真相的来源。

有一个真理源而不是很多真理总是一种好习惯。在这种情况下,如果您使输入的值与组件的状态不同,那么您将获得多个真相,从而使您的应用暴露于错误中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

linux 内核中有争议的 __set_task_state(tsk, state_value) 宏语法

我们为什么不使用let代替State?

在React中this.state与state

线程唤醒后,用TASK_RUNNING调用set_current_state的必要性是什么?

为什么当我们调用“任务”变量时,必须将其写为“ task()”

什么是“!” JavaScript中`state =!state;`中的均值

我们如何完成芹菜periodic_task中的停止任务?

在React State中传递html标签的正确方法是什么?

我们为什么需要在vaadin的绑定中设置bean ** binder.setBean(object)**

为什么我们需要在ConnectionString中设置最小池大小

我们为什么要在pytorch中“打包”序列?

如果可以编写我们自己的等待对象,那么异步方法为什么只能返回Task <T>,Task和void?

为什么我的UI无法反映@State属性中的更改?

为什么this.state在react native中未定义?

为什么在 React 中 State 比 Link 更受欢迎?

为什么我们需要在React Hook中返回一个函数?

为什么我们需要在React Native中绑定函数?

为什么我们不需要在React中绑定箭头功能?

列出sbt`Task`标签

为什么我们需要在打字稿中编写函数的泛型?例如函数 fill<IDontKnow>(){}

(React) 在 useEffect 中设置 state 的问题

了解State Monad中的State论点

我们如何知道哪个 Thread 用于执行 Task?

为什么我们不能在col标签中设置颜色?

在模板中访问$ state

当我们执行task.getException()时,如何更改错误消息,例如用户已经注册?

React State Hook - 我无法设置状态

Python 多线程进入 Celery 任务。celery_task.update_state() 错误

如何在React中将多个表单输入结果添加到数组State中