当前位置: 首页 > 知识库问答 >
问题:

使用setState赋值的问题

邓兴为
2023-03-14

使用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 
   }
 }

共有3个答案

邵麒
2023-03-14

对象将在下一次渲染中更改。

function handleChange(event) {
    const {name, value} = event.target;
    const newObject = {
      ...object,
      [name]: value
    } 
    setObject(newObject)
    console.log('newObject', newObject)
    console.log('currentObject', object)
  };

新对象!=对象

万俟招
2023-03-14

所以,我在睡了一段时间后,通过更多的在线研究,终于找到了答案。使用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

石喜
2023-03-14

如果希望对象具有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、为什么只读字段和只读自动属