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

jup*_*ror 3 reactjs

我想用 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;
Run Code Online (Sandbox Code Playgroud)

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

这是我的代码和框的链接。

我的错误在哪里?如何设置多个状态值以在以后分别更新它们?

Sho*_*ili 14

你可以用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...
Run Code Online (Sandbox Code Playgroud)

  • 我相信这种模式将绕过 React 检测状态变化的能力。在微小的简单应用程序中这可能无关紧要,但在复杂的应用程序中可能会导致问题。这个人的评论是相关且有帮助的:/sf/answers/3997192811/ 另外我相信 `useReducer()` 正是为此而存在。文档:/sf/ask/3750223011/ (4认同)

小智 5

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

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