我有一个有三个字段的表单,HandleChange方法在第一个字段(DateOfBirth)中工作,但在(Id1)和(Id2)字段中不工作。
由于某些原因,当我尝试更改(Id1 | | Id2)字段的值时,setState返回此错误。
“组件正在将文本类型的受控输入更改为非受控。输入元素不应从受控切换为非受控(反之亦然)。在组件的使用寿命内,决定使用受控还是非受控输入元素”
import React, { Component } from 'react';
class Form extends React.Component {
constructor(props){
super(props);
this.state = { DateOfBirth:'1990-01-24', Metadata: {Id1:'33813518109', Id2:'John Doe'}}
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
const target = event.target;
const name = target.name;
var value = target.value;
if(name === "Id1" || name === "Id2")
this.setState({Metadata:{[name]: value}});
else
this.setState({[name]: value});
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<input name="DateOfBirth" type="date" onChange={this.handleChange} value={this.state.DateOfBirth} />
<input name="Id1" type="text" onChange={this.handleChange} value={this.state.Metadata.Id1} />
<input name="Id2" type="text" onChange={this.handleChange} value={this.state.Metadata.Id2} />
</form>
</div>
);
}
}
export default Form;
来自反应文档。
更新器的输出与preState进行了浅合并。
也就是说当你这么做的时候
// name === 'Id1'
// value === 'dummy'
this.setState({Metadata:{[name]: value}});
然后,状态中的元数据
键将具有以下形状:
{
Metadata: {
Id1: "dummy"
}
}
你看到问题了吗?现在使用Id2
输入接收为值未定义(
this.state.Metadata.Id2
不存在),这将使react抛出一个有关非受控组件的错误。
修复它需要做的是创建嵌套对象属性的完整副本:
this.setState(prevState => ({
Metadata:{
...prevState.Metadata,
[name]: value
}
}));
如何显示一个计数器从1到2到3再到n的按钮点击。我尝试在for循环中执行setState,但不起作用。我知道React的setState是异步的,我甚至尝试过使用prevState,但它不起作用。 https://www.webpackbin.com/bins/-kku1nja-ectflydgf_s 我想把计数从0增加到n,作为点击时的定时器。
问题内容: 是否有可能用更新对象的属性? 就像是: 我努力了: 还有这个: 第一个导致语法错误,第二个则什么都不做。有任何想法吗? 问题答案: 有多种方法可以执行此操作,因为状态更新是异步操作,因此要更新状态对象,我们需要使用带有updater函数。 1-最简单的一个: 首先创建的副本,然后执行以下更改: 除了使用,我们还可以这样写: 2-使用 扩展运算符: 注意: 并且仅创建浅表副本,因此,如果
是否可以使用更新对象的属性? 类似于: 我试过: 还有这个: 第一个会导致语法错误,而第二个则什么也不做。有什么想法吗?
在的文档中: setState()不会立即突变this.state但会创建一个挂起的状态转换。调用此方法后访问this.state可能会返回现有值。 第二个(可选)参数是一个回调函数,它将在setState完成并重新呈现组件后执行。 如果我只是想更新我的状态,我会创建一个什么都不做的回调吗?
我在一个应用程序的前端原型上工作,该应用程序具有给定的JS、React和CoreUI4 React技术栈。我来自Python背景,在网络开发和我给定的技术堆栈方面没有太多经验。当我不得不开始使用钩子时,这一点变得很明显。 问题 我真的不明白为什么它不更新我的和/或不渲染。我需要一个条件渲染,我也使用。 我试图: 从我的主应用程序中传递一个更大的状态,一旦我启动条件逻辑(挂钩规则)就无法工作。 当我
> 控制器只是实例化这个对象并返回。 在输出中,我看到Date对象的默认表示形式是一个整数(可能是历元的毫秒) 是否有任何方法可以将日期对象的默认jsonification更改为ISO字符串或任何其他字符串? 编辑: 我对Spring和Spring Boot很陌生。我使用的模板来自spring网站上的一个示例应用程序。JSONification是通过Jackson完成的。Rest一下,一般来说,我