使用React是新手,在尝试更改文本字段以更新状态时遇到一些问题。使用初始状态设置为useState的功能组件。
我肯定我只是错过了一些简单的事情。。。但最终还是放弃了,寻求帮助。
以下是功能组件的完整代码:
import React, { useState } from 'react';
import Step1 from '../Element/FormStep1';
const NewForm = () => {
let [object, setObject] = useState({
property: {
entry: 'string'
}
});
function handleChange(event) {
const {name, value} = event.target;
setObject({
...object,
[name]: value
})
console.log(object)
};
return (
<form>
<Step1
handleChange={handleChange}
object={object}
/>
</form>
);
}
export default NewForm
对于表单组件:
import React from 'react';
import TextField from '@material-ui/core/TextField';
import t from 'typy'
export default function Step1(props) {
return(
<React.Fragment>
<TextField
name={t(props.object, 'property.entry').safeObject}
type='text'
onChange={props.handleChange}
/>
</React.Fragment>
);
}
当handleChange函数运行时,它不会替换目标属性,而是创建一个以原始值作为名称的新属性,即。
object {
property: {
entry: 'string'
},
string: value //Text input
}
目的是用文本输入替换值“string”。
object {
property: {
entry: 'value' //Text input
}
}
对象将在下一次渲染中更改。
function handleChange(event) {
const {name, value} = event.target;
const newObject = {
...object,
[name]: value
}
setObject(newObject)
console.log('newObject', newObject)
console.log('currentObject', object)
};
新对象!=对象
所以,我在睡了一段时间后,通过更多的在线研究,终于找到了答案。使用lodash的set方法是可行的。因此,需要对my Textfield上的name属性进行细微更改:
<TextField
name='property.value'
type='text'
onChange={props.handleChange}
/>
在我的函数组件文件中导入set之后,导入{set}从'logash';
我可以修改handleChange函数如下:
function handleChange(event) {
const {name, value} = event.target;
set(object, name, value)
console.log(object) // to see that it worked in the console.
}
这项工作现在正按预期进行(几个小时后的挫折感)
注意...这是我真正找到答案的地方:
https://levelup.gitconnected.com/handling-complex-form-state-using-react-hooks-76ee7bc937
如果希望对象具有value属性,则应添加{}
。
你应该改变
setObject({
...object,
[name]: value
})
到
setObject({
...object,
[name]: { value } // added { }
})
到目前为止我已经重写了这篇文章:
有人能帮助我的java阶乘赋值吗?我认为我做得对,但我不确定。我需要让用户输入一个数字,然后计算输入数字的阶乘。就像人输入10一样,用户会将此视为输出:0! = 1, 1! = 1, 2! = 2, 3! = 6, 4! = 24, 5! = 120, 6! = 720, 7! = 5040, 8! = 40320, 9! = 362880
本文向大家介绍详解JAVA 连等赋值问题,包括了详解JAVA 连等赋值问题的使用技巧和注意事项,需要的朋友参考一下 一、描述 关于 Java 连等赋值,例如a=b=c;我们知道它是从右往左依次赋值的,其结果大致可以拆分为b=c;a=b;,但是当栈中没有持有变量的引用时,则会出现问题,例如: 如果将以上n1.n = n1 = new Node(nn, 3);拆分后: 二、分析 1. 初始情况 2.
if语句中的setState(): setState()out if语句: 我现在正面临这个问题,我想知道为什么... 谢谢:) 正确答案后编辑: 所以是的,我应该花更多的时间阅读React的Doc:p如果有人有兴趣知道我最后是怎么做的,下面是答案: 在文档中,他们说不能保证您的状态在重新呈现之前会有它的新值。所以您必须使用“componentdidupdate()”。 所以我做的是,我把: 在我
2.4. 赋值 使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边。 x = 1 // 命名变量的赋值 *p = true // 通过指针间接赋值 person.name = "bob" // 结构体字段赋值 count[x] = count[x]
简介 因为Scheme是函数式语言,通常来说,你可以编写不使用赋值的语句。然而,如果使用赋值的话,有些算法就可以轻易实现了。尤其是内部状态和继续(continuations )需要赋值。 尽管赋值非常习见并且易于理解,但它有一些本质上的缺陷。参见《计算机程序的构造和解释》的第三章第一节“赋值和局部状态”以及《为什么函数式编程如此重要》。 R5RS中规定的用于赋值的特殊形式是set!、set-car
如何正确使用和?例如,当我创建一个有状态小部件时,它开始加载数据(FutureBuilder),然后我应该用新数据更新列表,所以我使用setState,但它开始循环无穷大(因为我再次重建了小部件),有什么解决方案吗?
本文向大家介绍C#中字段、属性、只读、构造函数赋值、反射赋值的问题,包括了C#中字段、属性、只读、构造函数赋值、反射赋值的问题的使用技巧和注意事项,需要的朋友参考一下 C#中字段、属性和构造函数赋值的问题提出问题如下所述: 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动属性的区别是什么? 3、字段和自动属性声明时的直接赋值和构造函数赋值有什么区别? 4、为什么只读字段和只读自动属