使用 React useState hook 设置多个状态值

Posted

技术标签:

【中文标题】使用 React useState hook 设置多个状态值【英文标题】:Set multiple state values with React useState hook 【发布时间】:2020-07-21 04:52:30 【问题描述】:

我想用 React 的 useState 钩子设置多个状态值,以便我可以用 useEffect 钩子分别更新它们。我有以下代码:

import React,  useState  from "react";

const initialValues = 
  phone: "",
  email: ""
;

const App = () => 
  const [order, setOrder] = useState("");
  const [paid, setPaid] = useState(false);
  const [submitting, setSubmitting] = useState(false);
  const [loading, setLoading] = useState(false);
  const [data, setData] = useState(initialValues);

  return (
    <div className="App">
    </div>
  );
;

export default App;

但是当我使用 React DevTools 检查应用程序时,我看到我的钩子有多个“状态”值,而不是“订单”、“支付”、“提交”等。

这是我的codesandbox的链接。

我的错误在哪里?如何设置多个状态值以便稍后单独更新它们?

【问题讨论】:

您的解决方案没有问题。当您解构 useState 返回的数组时,您为这些状态指定的名称仅对您的组件是本地的。 React 不知道你给 useState 返回的数组中的那些元素起什么名字。不要担心出现在开发工具中的通用名称,只需尝试您的解决方案,您就会发现它有效。对于在开发工具中显示的内容,您可以使用 useDebugValue: reactjs.org/docs/hooks-reference.html#usedebugvalue @olpe 非常感谢。您可以发表您的评论作为答案,我会接受。 好吧,我其实在想应该是评论还是答案。 【参考方案1】:

您的解决方案没有任何问题。当您解构 useState 返回的数组时,您为这些状态指定的名称仅对您的组件是本地的。 React 不知道你给 useState 返回的数组中的那些元素起什么名字。不用担心 dev-tools 中显示的通用名称,只需尝试您的解决方案,您就会发现它有效。

对于在开发工具中显示的内容,您可以使用useDebugValue。

【讨论】:

【参考方案2】:

你没有犯错。如果你想像这样使用单独的钩子,这就是它们在 React DevTools 中的显示方式。如果您想为每个钩子关联名称标签,请查看此 *** 答案:

Is there any way to see names of 'fields' in React multiple state with React DevTools when using 'useState' hooks

【讨论】:

【参考方案3】:

您可以使用useState 钩子创建一个状态,然后像这样将每个值放在那里。

import React,  useState  from "react";

const initialValues = 
  phone: "",
  email: ""
;

const App = () => 
  const [state, setState] = useState(
     order:'',
     paid: false,
     submitting: false,
     loading: false,
     data: initialValues
  );
  // example of setting this kind of state
  const sampleChanger = () => 
     setState(...state, paid: true, order: 'sample');
  
// etc...

【讨论】:

我相信这种模式会绕过 React 检测状态变化的能力。在小型简单应用程序中可能无关紧要,但可能会导致复杂应用程序出现问题。这个人的评论是相关且有用的:***.com/a/57102754/3684449 我也相信useReducer() 正是为此而存在的。文档:***.com/questions/53574614/… 非常感谢您的回答!谢谢大佬!

以上是关于使用 React useState hook 设置多个状态值的主要内容,如果未能解决你的问题,请参考以下文章

使用 React api 查询 useState Hook 管理

React hooks:为啥异步函数中的多个 useState 设置器会导致多次重新渲染?

使用 useState 和 useContext React Hooks 持久化 localStorage

react使用hook——useState的坑

react 使用hooks

react的hook踩坑,useState的set方法不生效问题。