• React组件在什么情况下会重新渲染


    当我们使用React编写组件时,组件的重新渲染是一个重要的概念。重新渲染是指React组件在特定情况下会重新执行其渲染函数,更新用户界面以反映最新的数据。很多情况下,组件不必要的重新渲染会严重影响性能,所以要充分了解触发组件重新渲染的条件。

    Props 变化

    公众号:Code程序人生,个人网站:https://creatorblog.cn

    React中,组件的props是父组件传递给子组件的数据。当这些props发生变化时,子组件将重新渲染以反映最新的数据。

    // 父组件
    const ParentComponent = () => {
      const [value, setValue] = useState(0);
    
      return <ChildComponent prop={value} />;
    };
    
    // 子组件
    const ChildComponent = React.memo(({ prop }) => {
      // prop发生变化时,会触发重新渲染
      return <p>{prop}</p>;
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    State 变化

    React中的状态是通过useState来管理的。当使用setState函数更新状态时,组件将重新渲染。

    const Counter = () => {
      const [count, setCount] = useState(0);
    
      const increment = () => {
        setCount(count + 1); // count发生变化时,组件重新渲染
      };
    
      return (
        <div>
          <p>{count}</p>
          <button onClick={increment}>Increment</button>
        </div>
      );
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Context 变化

    React Context允许我们在组件树中传递数据而不必一级一级手动传递。当Context的值发生变化时,订阅了该Context的组件将重新渲染。

    const MyComponent = () => {
      const contextValue = useContext(MyContext); // MyContext的值发生变化时,组件重新渲染
    
      // ...
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 forceUpdate

    虽然不推荐使用 forceUpdate,但在某些情况下,你可能需要强制组件重新渲染。forceUpdate方法将会导致组件的render方法被调用。

    const MyComponent = () => {
      const forceUpdate = useForceUpdate();
    
      const handleClick = () => {
        // 强制组件重新渲染
        forceUpdate();
      };
    
      // ...
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    父组件重新渲染

    当一个子组件嵌套在一个父组件中时,父组件重新渲染,子组件也会重新渲染。

    // 父组件
    const ParentComponent = () => {
      // 状态变量 count
      const [count, setCount] = useState(0);
    
      return (
        <div>
          <p>Parent Component Count: {count}</p>
          <ChildComponent />
          <button onClick={() => setCount(count + 1)}>Increment Parent</button>
        </div>
      );
    };
    
    // 子组件
    const ChildComponent = () => {
      console.log("Child Component Rendered");
    
      return <p>Child Component</p>;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    总结

    这些情况涵盖了导致React函数式组件重新渲染的主要场景。React通过虚拟DOM检测这些变化,从而实现了高效的更新,确保用户界面保持最新。理解这些重新渲染的情况有助于我们更好地优化和设计React应用程序。

  • 相关阅读:
    设计模式之【建造者模式】
    口袋参谋:30秒导出淘宝同行的全部数据,是如何做到的?
    SVM应用
    开发《俄罗斯方块》的意义
    ORM基本操作
    第6章 初识Spring框架
    热噪声 Thermal noise
    pvrcnn在openpcdet框架下的实现流程
    MyBatis 及 MyBatis Plus 纯注解方式配置(Spring Boot + Postgresql)
    第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司
  • 原文地址:https://blog.csdn.net/m0_46171043/article/details/134452321