提问人:De-J 提问时间:7/28/2023 最后编辑:NilDe-J 更新时间:7/28/2023 访问量:39
当更新状态与之前相同时阻止呈现
Prevent renders when updated state is same as previous
问:
有没有一种 react 生命周期方法,只有当更新的状态与以前的状态不同时,我们才能使用它来执行重新渲染。例如,在以下代码中:
class App extends Component {
constructor() {
super();
this.state = {
value: "abcd"
};
}
handlePress = () => {
this.setState({ value: "abcd" });
};
render() {
console.log("render");
return (
<div>
<h1>{this.state.value}</h1>
<button onClick={this.handlePress}>Press</button>
</div>
);
}
}
您可以看到,在按下按钮时,即使状态与之前相同,它仍然会导致函数运行。render()
我知道我们可以使用或防止这种情况发生,但是否有其他方法/生命周期方法可以实现这一目标?shouldComponentUpdate()
PureComponent
我还在这里创建了上述代码的沙盒/游乐场。
答:
1赞
Audun Hilden
7/28/2023
#1
如果您使用的是功能组件,则可以使用它来实现这一点。React.memo
import React, { useState, memo } from 'react';
const App = () => {
const [value, setValue] = useState("abcd");
const handlePress = () => {
setValue("abcd");
};
console.log("render");
return (
<div>
<h1>{value}</h1>
<button onClick={handlePress}>Press</button>
</div>
);
};
export default memo(App);
对于类组件,您可以使用 ,但必须手动比较更改。shouldComponentUpdate
shouldComponentUpdate(nextProps, nextState) {
return nextState.value !== this.state.value;
}
编辑
React.memo 只跟踪道具,不跟踪状态。
感谢 @Oktay Yuzcan 指出这一点。
评论
0赞
De-J
7/28/2023
除了此之外,是否可以使用任何生命周期方法?shouldComponentUpdate
0赞
Oktay Yuzcan
7/28/2023
React memo 不会阻止在状态更改后重新渲染。它可以防止在道具不变时重新渲染。
0赞
Audun Hilden
7/28/2023
@OktayYuzcan这正是OP所要求的
0赞
Oktay Yuzcan
7/28/2023
OP 询问如何在状态更改时防止重新渲染。备忘录是怎么做到的?
0赞
Audun Hilden
7/28/2023
仅当更新状态与先前状态不同时,OP 才希望执行重新渲染
评论