我想用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的链接。
我的错误在哪里?如何设置多个状态值以在以后分别更新它们?
答案 0 :(得分:4)
您可以使用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...
答案 1 :(得分:2)
您的解决方案没有错。当您解构useState返回的数组时,为这些状态指定的名称仅在组件本地。 React不知道您为useState返回的数组中的那些元素指定的名称。不必担心开发工具中显示的通用名称,只需尝试您的解决方案,您就会发现它有效。
对于开发工具中显示的内容,可以使用useDebugValue。
答案 2 :(得分:0)
您没有记错。如果您想使用这样的独立钩子,这就是它们在React DevTools中的显示方式。如果您希望每个挂钩都具有名称标签,请查看以下StackOverflow答案: