是否可以将对象存储为React组件状态?如果是,那么我们如何使用setState更改该对象中键的值?我认为在语法上不允许写这样的东西:

this.setState({ abc.xyz: 'new value' });

在类似的情况下,我还有另一个问题:在React组件中有一组变量,这样就可以在组件的任何方法中使用它们,而不是将它们存储在状态中,这样可以吗?

您可以创建一个包含所有这些变量的简单对象,并将其放置在组件级别,就像在组件上声明任何方法一样.

很可能会遇到这样的情况,即在代码中包含大量业务逻辑,并且需要使用许多变量,这些变量的值通过多种方法更改,然后根据这些值更改组件的状态.

因此,与保持所有这些变量的状态不同,您只保留那些值应该直接反映在UI中的变量.

如果这种方法比我在这里写的第一个问题好,那么我不需要在状态中存储对象.

推荐答案

除了kiran的帖子,还有update helper(以前是a react addon).可以使用npm install immutability-helper与npm一起安装

import update from 'immutability-helper';

var abc = update(this.state.abc, {
   xyz: {$set: 'foo'}
});

this.setState({abc: abc});

这将使用更新的值创建一个新对象,其他属性保持不变.当你需要做一些事情,比如推送到一个数组上,同时设置一些其他值时,这会更有用.有些人在任何地方都使用它,因为它提供了不变性.

如果你这样做,你可以用以下来弥补

shouldComponentUpdate: function(nextProps, nextState){
   return this.state.abc !== nextState.abc; 
   // and compare any props that might cause an update
}

Reactjs相关问答推荐

为什么我的功能React组件中的setInterval只更改一次值?

webpack 5中动态导入的路径

InfiniteScroll持续获取数据,直到超过最大更新深度

为什么我无法访问窗口事件处理程序中的状态?

Redux Provider Stuck甚至彻底遵循了文档

有没有一种方法可以在没有强烈动画的情况下有条件地渲染组件?

React useEffect 问题...异步函数内的变量正在获取延迟的更新值

如何在React组件中自动更新图表数据?

PWA:注册事件侦听器不会被触发

在 golang 服务器中刷新或直接 url 路径时响应 404

从服务器获取数据时未定义,错误非法调用

react-router v6 中的 BrowserRouter 和 createBrowserRouter 有什么区别?我可以在不使用数据 API 的情况下使用 createBrowserRouter 吗?

null 不是对象(判断RNSound.IsAndroid)

Wordpress 插件在激活时创建一个 React Public 页面

当我在 useEffect 中使用 useDispatch 时,我的组件继续渲染

如何避免在 react useEffect 上滚动时出现小的延迟?

list 组件未按预期运行

React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

如何从一组对象映射 MUI 5 图标并更改其 colored颜色 ?

将 set statehook 函数传递给子路由组件.解构错误