• 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应用程序。

  • 相关阅读:
    S32K324芯片学习笔记-实时控制系统-ADC
    【LeetCode】206. 反转链表—力扣
    python如何批量创建文件与文件夹
    Python学习之——正则表达式
    深入浅出 -- 系统架构之微服务标准组件及职责
    分库分表实战(6):小试牛刀 — 千万级数据之sql优化上篇
    Python 中的邻接矩阵
    【论文解读】Faster sorting algorithm
    聚焦离子束FIB测试的计量技术规范盘点
    数论1---整除
  • 原文地址:https://blog.csdn.net/m0_46171043/article/details/134452321