是否可以使用setState更新对象的属性?
就像是:
this.state = {
jasper: { name: 'jasper', age: 28 },
}
Run Code Online (Sandbox Code Playgroud)
我试过了:
this.setState({jasper.name: 'someOtherName'});
Run Code Online (Sandbox Code Playgroud)
还有这个:
this.setState({jasper: {name: 'someothername'}})
Run Code Online (Sandbox Code Playgroud)
第一个是语法错误,第二个什么都不做.有任何想法吗?
当react组件状态发生变化时,将调用render方法.因此,对于任何状态更改,可以在呈现方法主体中执行操作.那么setState回调是否有特定的用例?
I'm finding these two pieces of the React Hooks docs a little confusing. Which one is the best practice for updating a state object using the state hook?
Imagine a want to make the following state update:
INITIAL_STATE = {
propA: true,
propB: true
}
stateAfter = {
propA: true,
propB: false // Changing this property
}
Run Code Online (Sandbox Code Playgroud)
OPTION 1
From the Using the React Hook article, we get that this is possible:
const [count, setCount] = useState(0);
setCount(count + 1); …Run Code Online (Sandbox Code Playgroud) 我想用 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 检查应用程序时,我看到我的钩子有多个“状态”值,而不是“订单”、“付费”、“提交”等。
这是我的代码和框的链接。
我的错误在哪里?如何设置多个状态值以在以后分别更新它们?
我想知道最好的方法是key/value为statein a定义多于一对Functional Component。
在一类我会initialitheState喜欢
this.state = {
first: 'foo',
second: 'bar'
};
Run Code Online (Sandbox Code Playgroud)
更新State我的电话
this.setState({
first: 'foobar'
second: 'barfoo'
});
Run Code Online (Sandbox Code Playgroud)
现在React Hooks我State像这样初始化。
const [first setfirst] = useState('foo');
const [second, setSecond] = useState('bar');
Run Code Online (Sandbox Code Playgroud)
更新State我的电话
setFirst = 'foobar';
setSecond = 'barfoo';
Run Code Online (Sandbox Code Playgroud)
但是,恕我直言,这并不理想。我不得不重写const [x, setX] = useState(...);每次我想要一个新的添加key/value对到State object。样板。我还必须始终牢记 的“二传手”名称x,即setX. 如果State object增长,那将变得混乱。
如果我可以简单地打电话会更好
setState(first: 'foobar', second: 'barfoo'); …Run Code Online (Sandbox Code Playgroud)