首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改变对象的setState在其他对象中的反应?

如何改变对象的setState在其他对象中的反应?
EN

Stack Overflow用户
提问于 2022-07-03 20:21:56
回答 2查看 31关注 0票数 0

我已经创建了一个处于React状态的对象的状态,但是我需要将另一个对象增加到相同的状态。但是,我不能使用setState()属性,因为它会导致重呈现(无限循环)。

我的状态:

代码语言:javascript
复制
const [testObject, setTestObject] = useState({
       id: 0,          
       telephone: 123,            
       personalData: {
            name: '',
            alias: '',
            gender: ''
        }
    })

错误:

代码语言:javascript
复制
Too many re-renders. React limits the number of renders to prevent an infinite loop.

我试图为它找到一个解决方案,但我无法解决它:

代码语言:javascript
复制
setTestObject({...testObject, personalData: {
        ...testObject, name: 'McDonnell DC-10'
    }})

我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2022-07-03 20:34:16

您只需要指定您使用的是personalData,您就沿着正确的路线前进了。

代码语言:javascript
复制
setTestObject({...testObject, personalData: {
        ...testObject.personalData, name: 'McDonnell DC-10'
    }})

您甚至可以使用旧状态作为参数,以获得更好的性能。

代码语言:javascript
复制
setTestObject(testObject => { return {...testObject, personalData: {
        ...testObject.personalData, name: 'McDonnell DC-10'
    }}})
票数 0
EN

Stack Overflow用户

发布于 2022-07-03 20:39:02

避免无限循环的方法是在useEffect()中添加代码,如下所示:

代码语言:javascript
复制
 useEffect(() => {
    setTestObject({
      ...testObject,
      personalData: {
        ...testObject.personalData,
        name: 'McDonnell DC-10',
      },
    });
  }, []);

另外,我想您希望更新属性name,而不是在personalData中再次添加整个对象,这就是为什么您需要使用...testObject.personalData

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72849644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档