gpt4 book ai didi

reactjs - 如果我没有更改状态的引用,为什么 React 会调用渲染函数?

转载 作者:行者123 更新时间:2023-12-03 14:12:32 24 4
gpt4 key购买 nike

那么为什么在这种情况下会出现 React 调用渲染:

class MyComponent extends React.Component {
constructor(props) {
this.state = {
user: { name: 'john' },
};
}

render() {
return (
<div>
Name: {this.state.user.name}
<button onClick={() => {

const user = this.state.user;
user.name = 'Michael';

// this works, also this.setState({}) with empty json works too
this.setState({ user });
}}> Change name </button>
</div>);
}

我期望 React 不会检测到任何更改,并且为了使上述代码能够复制用户对象,以便 React 检测到这样的更改:

const user = {...this.state.user}; // a new copy of object, so new refference

有什么想法吗?

最佳答案

使用空对象设置状态是有效的,因为 React 不会对状态突变本身执行任何操作。相反,它只是使用状态对象并在调用渲染方法时创建更新的虚拟 DOM,这也反射(reflect)了状态突变。

但是,进行状态突变的问题是,生命周期方法现在无法清楚地区分 prevStatethis.state 以及大量比较将会失败,因为 prevStatethis.state 值都将引用相同的引用。

关于reactjs - 如果我没有更改状态的引用,为什么 React 会调用渲染函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com