Reactjs React-上下文提供程序使用与使用者相同的值重新呈现

Reactjs React-上下文提供程序使用与使用者相同的值重新呈现,reactjs,Reactjs,我有一个简单的提供者/消费者案例,我注意到即使提供者提供了相同的值,孩子的3个消费者也总是重新选择 正如医生所说 作为提供程序的后代的所有使用者都将重新呈现 每当提供者的值属性更改时。传播 提供给其后代使用者(包括.contextType和 useContext)不受shouldComponentUpdate方法的约束,因此 即使祖先组件跳过更新,消费者也会更新 在这种情况下,值不会改变,但为什么child3会重新加载 const UserContext1 = React.createConte

我有一个简单的提供者/消费者案例,我注意到即使提供者提供了相同的值,孩子的3个消费者也总是重新选择

正如医生所说

作为提供程序的后代的所有使用者都将重新呈现 每当提供者的值属性更改时。传播 提供给其后代使用者(包括.contextType和 useContext)不受shouldComponentUpdate方法的约束,因此 即使祖先组件跳过更新,消费者也会更新

在这种情况下,值不会改变,但为什么child3会重新加载

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()。

“默认行为是在每次状态更改时重新渲染,在绝大多数情况下,您应该依赖默认行为。”