![](/img/trans.png)
[英]What the difference of this.state and this.setstate in ReactJS?
[英]What is the difference “setter of React.useState” and “this.setState” during update of state
当我单击 AppFunctional 的按钮时,组件不会更新,但 state 已更改。 在 AppClass 中没问题。
在这两种情况下,都用“推”改变原始 state,但我不明白有什么区别。
提前致谢。
const List = ({ items }) => {
return <h1>{items.join("-")}</h1>;
};
class AppClass extends React.Component {
state = {
items: [1],
};
addItem = () => {
const { items } = this.state;
items.push(2);
this.setState({
items,
});
};
render() {
const { items } = this.state;
return (
<div>
<button onClick={this.addItem}>Add Item</button>
<List items={items} />
</div>
);
}
}
const AppFunctional = () => {
const [items, setItems] = useState([1]);
const addItem = () => {
setItems((state) => {
state.push(2);
return state;
});
};
return (
<div>
<button onClick={addItem}>Add Item</button>
<List items={items} />
</div>
);
};
Arrays 是引用类型,因此此代码意味着您返回相同的 object,尽管您同时推送了另一个值
setItems((state) => {
state.push(2);
return state;
});
为了让useState
钩子了解发生了变化,您需要返回另一个引用,因此只需复制数组:
setItems((state) => {
state.push(2);
return state.slice();
});
或者,更好:扩展运算符会将state
的所有项目复制到一个新数组中,并且您还在末尾附加 2。
setItems((state) => [...state, 2]);
useState是一个functional
组件挂钩,用于设置初始 state 并提供一个回调方法来更新 state 而setState是一个class
组件方法来更新 state
那么 useState 用于功能组件,而 setState 用于 class 组件,但是如果您想了解如何以及为什么,类中的 React 依赖于“this”来触发更改(重新渲染),这就是为什么它必须以不同方式对待类并使用“this” " 关键字与 state aka "this.setState" 和 "this.state" 或 "this.props"
我强烈推荐 Dan Abramov 解释它们之间的区别: https://overreacted.io/how-are-function-components-different-from-classes/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.