React useState - 每个组件使用一个状态还是多个状态? [关闭]

2024-01-06

使用 Hooks/Functional 组件来优化 React 并使代码更具可读性的更好方法是什么?每个组件有一个或多个 setState 钩子?

为了扩展我的问题,请考虑以下内容:

通过钩子,我们可以使用多个状态,以某种方式更方便地分割特定用途的状态(例如,一个状态用于用户数据,另一个状态用于保存加载标志,其他状态用于为 API 检索的数据等) 。在我的第一步中,我确信最好的方法是我想要管理的每个数据都有多个状态......但是,一段时间后,当我想要时,我开始遇到多个状态之间的同步问题更新/读取效果函数 (useEffect) 中的多个状态。

所以,我开始相信使用 Hooks 管理状态的最佳方法是它只有一个使用对象的状态,并从这里管理我的所有数据...... 就像类组件一样......

const [data, setData] = useState({
    retrieveData: false,
    apiData: [],
    userInfo: [],
    showModal: false
})

// To update:
setData(oldData => {
    return { ...oldData, showModal: true }
})

// Or:
setData({ ...data, retrieveData: true })

在我看来,最好有一个状态,但这可能会以某种我没有考虑到的方式影响性能/可读性?


反应文档建议使用多个单独的状态位 https://reactjs.org/docs/hooks-faq.html#should-i-use-one-or-many-state-variables对于彼此独立变化的事物:

然而,相反我们建议根据值倾向于一起变化的情况将状态拆分为多个状态变量。

(他们的强调)

例如,这与记忆效果很好(useMemo, useCallback),因此您可以指示对 X 的更改而不是对 Y 的更改会使已存储的项目无效。它还可以很好地编写您自己的钩子(有关示例,请参阅链接的文档)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React useState - 每个组件使用一个状态还是多个状态? [关闭] 的相关文章

  • javascript函数知道它的名字吗

    我有一个名为 getItem 的函数 我想使用其中的代码读取该函数的名称 这可能吗 function getItem var functionName how do I read the function name alert functi
  • 如何使用jquery格式化数字

    我正在尝试删除 之后的数字 然后我想格式化数字 16810900 211233 喜欢这个 16 810 900 但我不知道该怎么做 这是我的 html 是这样的 div class main p class active 10200 00
  • 整个页面都是玻璃板

    有没有一种简单的方法可以在整个 HTML 页面上拥有一个 玻璃窗格 而不管缩放 幻灯片事件 平台 浏览器 移动 桌面 我所说的 简单 是指纯 CSS 支持 而不是插件 后备 插件建议也可能有用 Thanks 如果您只是指所有内容之上的一层
  • 如果Functions是javascript中的对象,为什么function.constructor指向Function而不是Object?

    当像这样从窗口对象创建以下函数时 function userInfo 既然函数是对象 为什么 userInfo constructor 显示 Function 而不是 Object 当使用以下内容时 它甚至显示函数而不是对象 Functio
  • MUI 组件上的渐变边框

    我没能找到相当于border image source css 我的目标是在按钮组件上渲染边框渐变 这是添加渐变边框的方法button成分 V5 const options shouldForwardProp prop gt prop gr
  • 为什么我的箭头函数有原型属性?

    正如文档中提到的https developer mozilla org en docs Web JavaScript Reference Functions Arrow functions https developer mozilla o
  • 获取 pdf 第 1 页(共 2 页)的图像

    我正在使用 html2canvas 和 jsPDF 以及 Angular4 创建图像 我想将此图像放置在 2 页生成的 pdf 的第 1 页上 但似乎这条线 doc save test pdf 需要在函数内部htm2canvas 因为如果我
  • 强制执行 show.bind

    我有一个包含数据的表 当从另一个视图触发事件时 我希望视图检查 show bind 语句 问题是该事件没有更改当前视图中的任何数据 foo html tr p canBeRemoved p tr 我正在使用 EventAggregator
  • 将 javascript 放在 header 之外有多糟糕?

    这个问题几乎已经说明了一切 我开始添加一些功能到我的周末项目 http www my clock net 对于我和几个朋友来说 这是一个小应用程序 因为我们是交换生 所以它对我们来说有点有用 但事情是这样的 我在 php 中执行此操作并使用
  • 尝试使用 CasperJS 跟踪 iframe 中的链接

    我正在尝试使用CasperJS http casperjs org index html跟踪 iframe 中的链接 但我似乎无法获取 iframe 的文档 这是使用我找到的 iframe 示例页面进行的测试 第三个 iframe 有一个名
  • jQuery 中如何判断 JSON 对象是否为空

    我有以下 JSON meta limit 20 next null offset 0 previous null total count 0 objects 我对对象感兴趣 我想知道对象是否为空并显示警报 像这样的东西 success fu
  • 内联执行生成的汇编程序

    我正在阅读以下演示文稿 http wingolog org pub qc 2012 js slides pdf http wingolog org pub qc 2012 js slides pdf其中讨论了 4 10 19 内联 ASM
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • Facebook 登录无法在移动浏览器中使用

    我使用 react facebook login 在我的网站中实现了 facebook 登录module https github com keppelen react facebook login 我在 ComponentDidMount
  • 使用 jQuery 更改 SVG 元素的“xlink:href”属性

    我正在尝试使用单击事件更改 xlink href 属性 到目前为止它部分有效 这就是我正在做的 HTML a href class ui btn ui corner all ui shadow editIcon style text ali
  • 单击时突出显示文本(javascript jquery html)

    当您在所有浏览器中双击某个单词时 它们会自动突出显示单击下的单词 但是否有可能找到一种方法exact单击一下就会发生同样的事情吗 我想这涉及到的事情可能是 TextRange 的东西 对所有段落 或整个正文或 div 的 onclick 做
  • JavaScript 按名称获取当前作用域中的变量

    所以我有一个变量和该变量名称的字符串 function Factory string var foo bar console log foo is equal to this string 如果变量所在的对象是当前对象 如何从字符串文字中获
  • Modernizr 未将类应用于 html 标签

    我目前正在构建一个网站 我需要使用 Modernizr 但由于某种原因 它没有将类应用到 html 标签 因为它应该 我的代码如下所示
  • Antd select 元素:如何禁用输入?

    我正在尝试使用模式 multiple 的选择元素 我希望禁用输入 这意味着用户只能在现有选项之间进行选择 而不能输入文本 我该怎么做呢 我的元素 import Select from antd import antd dist antd c
  • python 函数返回 javascript date.getTime()

    我正在尝试创建一个简单的 python 函数 它将返回与 javascript 相同的值new Date getTime 方法 如所写here http www w3schools com js js dates asp javascrip

随机推荐

  • 将单个 doc 文件转换为 pdf

    我正在使用以下代码如何以编程方式将 Word 文件转换为 PDF https stackoverflow com questions 607669 how do i convert word files to pdf programmati
  • 在 virtualenv 中创建项目时没有名为 django.core 的模块

    所以我环顾了很多与我类似的问题 但我找不到具体的答案 我的电脑规格是 Windows 7 64 位 我的问题是这样的 1 我使用 pip 安装了 virtualenv pip install virtualenv 2 之后我创建并激活了一个
  • JUnit 5 有类似 Cucumber 的标记钩子的东西吗?

    有没有办法像 Cucumber 一样在 JUnit5 中用钩子注释单个测试 例如 在黄瓜中 可以编写像这样的钩子 Before SomeTest public void beforeSomeTest 然后 如果我们使用 SomeTest 注
  • 如何从 calibrateCamera 结果获取相机世界位置?

    我正在使用 calibrateCamera 执行相机校准 输出的一部分是一组 Rodrigues 旋转向量和 3 D 平移向量 我对摄像机的世界位置感兴趣 如果我直接绘制平移点 结果看起来不正确 我觉得我的坐标空间很混乱 但我在解析 ope
  • nginx try_files 和 add_header

    有人可以解释一下吗 我有一个 nginx 服务器块 其中包含以下代码片段 location try files uri uri index html 基本上 我用它来提供 Angular SPA 它运作良好且很棒 现在我想追加Access
  • 显示韩语字符 - iOS 应用程序

    我正在尝试在我的 iPhone 应用程序中显示韩文文本 该应用程序将字母的 Unicode 逐一附加到 NSMutableString 中 并在附加每个字母后在屏幕上显示该字符串 我了解连接字母 Jamo 有一些规则 是否有一个函数可以自动
  • 从函数内部禁用 `functools.lru_cache`

    我想要一个可以使用的功能functools lru cache 但不是默认情况下 我正在寻找一种使用函数参数的方法 该函数参数可用于禁用lru cache 目前 我有该函数的两个版本 其中一个版本带有lru cache和一个没有 然后我有另
  • 导入错误:无法导入名称应用程序

    我正在尝试按照教程进行操作 But from kivy import App gives ImportError cannot import name App 我怎样才能解决这个问题 我已经安装了kivy 1 8 0和cython 0 20
  • c# - 如果方法运行时间太长,则中止方法的执行

    如果运行时间太长 如何中止方法的执行 e g string foo DoSomethingComplex but if DoSomethingComplex 花费的时间太长 比如说 20 秒 然后只需将 foo 设置为 您可以创建一个运行您
  • Spring MVC:表单标签和命令错误

    我正在使用 Spring 框架进行编程 在处理表单标记中的 jsp 第 2 行 时显示以下错误后 我感到绝望 Error ERROR org springframework web servlet tags form InputTag Ne
  • Now.sh 构建中断的原因是:当前未启用对实验性语法“decorators-legacy”的支持

    预期的 添加后decko 对装饰器的支持 以及添加对experimetalDecoractors in my tsconfig js并使用 babel plugin proposal decorators in 包 json My now
  • 有没有办法在 Svelte 中将 props 声明为可选

    我创建了一些带有可选道具的组件 例如hide true 我的问题是 当我不通过该道具时 这些恼人的错误消息总是充斥着我的控制台
  • 点云生成

    我有一个 3D 几何形状 必须将其转换为点云 所得到的点云可以被认为等同于对象的激光扫描输出的点云 不需要生成网格 生成的点可能是均匀分布的 也可能只是随机分布的 没关系 3D形状可以以3D数学公式的形式提供 这必须使用 MATLAB 来完
  • 从命令行指定 dockerignore

    我有一个 dockerignore 文件 但对于一个用例 我想在命令行指定 dockerignore 的内容 例如 docker build ignore node modules t foo 有没有办法从命令行执行此操作 我在文档中没有看
  • ECMAScript 6:WeakSet 的用途是什么?

    WeakSet 应该通过弱引用来存储元素 也就是说 如果一个对象没有被其他任何东西引用 那么它应该从 WeakSet 中清除 我写了以下测试 var weakset new WeakSet numbers 1 2 3 weakset add
  • 更改 HTML 元素的背景颜色

    我有一张包含 100 多个不同大小和尺寸的几何形状的图像 我在它上面使用了图像映射并为每个分配了 ID area like area 我在 MySQL 数据库中存储了有关每个形状的记录 例如 box id color code 1 AEEE
  • 优化 QtCreator 编译器的配置

    我在 Windows 7 中使用 QtCreator 我想将其配置为使用第三级优化 O3 用于 C 编译器 我怎样才能加快我的代码速度以及需要进行哪些更改 尝试将下一行添加到您的 pro 文件中 remove possible other
  • 为标签栏设置背景图像

    我正在尝试以编程方式设置应用程序中选项卡栏的背景图像 我的代码如下 根视图控制器 h IBOutlet UITabBar mainTabBar IBOutlet UITabBarItem settingsBarItem IBOutlet U
  • 在新的命名空间中定义简单类型,例如 xsd:string?

    这应该是直截了当的 但在我看来 它似乎只包含有关复杂类型的信息 假设我已经定义了一个名称空间xmlns address http 现在 从我读到的内容来看 我似乎可以执行以下操作
  • React useState - 每个组件使用一个状态还是多个状态? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用 Hooks Functional 组件来优化 React 并使代码更具可读性的更好方法是什么 每个组件有一个或多个 setState 钩子