Skip to content

useMemo

和 useState 的参数类似,只不过它通常用于组件内部状态的改变导致另一个参数的改变,vue 中的 computed 功能可以用 useMemo 实现。例如,下面 value 大于 2 的时候,才会触发 increase 改变,increase 的初始值为 0,并且永远比 value 大 1.

js
import React, { memo, useState, useMemo } from "react";
function App() {
  const [value, setValue] = useState(0);
  const increase = useMemo(() => {
    if (value > 2) return value + 1;
  }, [value]);
  return (
    <div>
      <Child value={value} />
      <button
        type="button"
        onClick={() => {
          setValue(value + 1);
        }}
      >
        value:{value},increase:{increase || 0}
      </button>
    </div>
  );
}

//memo是函数组件,是为了优化父组件状态改变,不涉及到子组件状态改变,但是父组件仍然会在每次render时都渲染子组件。而使用了memo函数的组件,只有当子组件状态改变时才会重新渲染。
const Child = memo(function Child(props) {
  console.log("Child render");
  return <h1>value:{props.value}</h1>;
});
export default App;