Reactjs React-上下文提供程序使用与使用者相同的值重新呈现
我有一个简单的提供者/消费者案例,我注意到即使提供者提供了相同的值,孩子的3个消费者也总是重新选择 正如医生所说 作为提供程序的后代的所有使用者都将重新呈现 每当提供者的值属性更改时。传播 提供给其后代使用者(包括.contextType和 useContext)不受shouldComponentUpdate方法的约束,因此 即使祖先组件跳过更新,消费者也会更新 在这种情况下,值不会改变,但为什么child3会重新加载Reactjs React-上下文提供程序使用与使用者相同的值重新呈现,reactjs,Reactjs,我有一个简单的提供者/消费者案例,我注意到即使提供者提供了相同的值,孩子的3个消费者也总是重新选择 正如医生所说 作为提供程序的后代的所有使用者都将重新呈现 每当提供者的值属性更改时。传播 提供给其后代使用者(包括.contextType和 useContext)不受shouldComponentUpdate方法的约束,因此 即使祖先组件跳过更新,消费者也会更新 在这种情况下,值不会改变,但为什么child3会重新加载 const UserContext1 = React.createConte
const UserContext1 = React.createContext({
name: "Guest1"
});
class Child3 extends React.Component {
render() {
return (
<UserContext1.Consumer>
{user => {
console.log(user);
return <div>ssssssssssssssss</div>;
}}
</UserContext1.Consumer>
);
}
}
class MyComponent extends React.Component {
state = { name: "George" };
render() {
return (
<>
<UserContext1.Provider value='hello'>
<Child3/>
</UserContext1.Provider>
<button
type="button"
onClick={() => {
this.setState({ name: "hey" });
}}
/>
</>
);
}
}
const UserContext1=React.createContext({
姓名:“Guest1”
});
类Child3扩展了React.Component{
render(){
返回(
{user=>{
console.log(用户);
返回SSSSSSSS;
}}
);
}
}
类MyComponent扩展了React.Component{
州={姓名:“乔治”};
render(){
返回(
{
this.setState({name:“hey”});
}}
/>
);
}
}
如果您使用的是React 16.8+,则可以实现shouldComponentUpdate
或对功能组件使用React.memo()。“默认行为是在每次状态更改时重新渲染,在绝大多数情况下,您应该依赖默认行为。”