React | 副作用

副作用

"副作用" 在计算机科学中源自函数式编程范式,指的是函数除返回值外对其他部分产生的影响。

懂了,好像又没懂!!!

在了解副作用前,先熟悉一下纯函数组件。


1、什么是纯函数组件?

纯函数组件是 React 中的一个概念,它是指满足以下条件的组件:

  • 相同的 props 总是产生相同的渲染结果:只要 props 相同,组件的渲染结果就一定相同。

  • 没有副作用:组件不会修改外部状态或依赖外部状态。

  • 没有内部状态:组件不依赖于 useState 或 useReducer 管理的内部状态。

顺手补充内部状态:

如果一个组件的渲染结果依赖于内部状态,那么它就不是纯函数组件。例如:

function Counter() {
  const [count, setCount] = useState(0); // 内部状态

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

这个组件的渲染结果依赖于内部状态 count。

即使 props 相同,count 的变化也会导致渲染结果不同。

因此,这个组件不是纯函数组件。


接着继续说react中的副作用~

对于组件而言,需要访问外部数据、修改外部状态、订阅事件等

这些操作会导致组件的行为不再只由输入参数决定,破坏了纯函数的特性。

而这些操作,就是我们所说的副作用。


3、所以在React中副作用就是:

  • 组件渲染过程中执行的操作,即在useEffect中执行的这些操作(useEffect 本身就是为了处理副作用而设计的)

  • 如获取数据、更新 DOM 、订阅事件(监听窗口滚动事件、键盘事件等)等


4、再顺手一挖:

只有useEffect执行副作用操作,还有没有其他钩子?

useEffectOnce: 自定义 Hook,用于只执行一次副作用操作。
useEffectWithCleanup: 自定义 Hook,用于在组件卸载时执行清理操作的副作用函数。
useLayoutEffect:  在浏览器布局(DOM)更新之后同步调用副作用函数。

没怎么用过对不对,问题不大

这些Hook 基本就是useEffect的别名

通过命名明确 Hook 让开发者更清晰知道这些 Hook 的用途

而不是都全部都叫useEffect

但这又增加了丢丢学习成本

不过这都随团队的开发习惯来选择使用标准

无需过度关注~


以上内容皆服务于: 今天只学一个知识点:hooks