Skip to content

API

lazy

lazy 能够让组件第一次在被渲染之前延迟加载组件的代码。

用法:使用 Suspense 实现懒加载组件

js
import { Suspense, lazy } from 'react'

// lazy函数对组件进行导入
const Home = lazy(() => import('@/pages/Home'))

// 配置路由实例
const router = createBrowserRouter([
    {
        path: "/",
        element: <Suspense fallback={'加载中'}><Home /></Suspense>
    }
])

export default router;

memo

react默认渲染机制:子组件会跟随父组件一起重新重新渲染

memo 允许组件在props没有改变的情况下跳过重新渲染

  • memo(Component, arePropsEqual?)

  • 用法

    • 使用memo进行缓存 只有props发生变化的时候才会重新渲染
  • 比较机制:在使用memo缓存组件后,react会对每一个prop使用Object.is比较新值和老值,返回true,表示没有变化

    • 传递一个简单类型的prop prop变化时组件重新渲染
    • 传递一个引用类型的prop 比较的是新值和旧值的引用是否相等
    • 保证引用稳定 -> useMemo 组件渲染过程中缓存一个值
js
import { memo, useMemo, useState } from "react";

const MemoSon = memo(function Son(props) {
  console.log("子组件重新渲染");
  //   return <div>this is Son count={props.count}</div>;
  return <div>this is Son list={props.list}</div>;
});

function App() {
  const [count, setCount] = useState(0);

  const list = useMemo(() => {
    return [1, 2, 3];
  }, []);
  return (
    <div className="App">
      <button onClick={() => setCount(count + 1)}>change count</button>
      {/* <MemoSon count={count} /> */}
      <MemoSon list={list} />
    </div>
  );
}

export default App;

forwardRef

forwardRef 允许组件使用 ref 将 DOM 节点暴露给父组件。

  • const SomeComponent = forwardRef(render)
js
import { forwardRef, useRef } from "react";

// 子组件
const Son = forwardRef((props, ref) => {
  return <input type="text" ref={ref} />;
});

// 父组件
function App() {
  const sonref = useRef(null);
  const showRef = () => {
    console.log(sonref);
    sonref.current.focus();
  };
  return (
    <>
      <Son ref={sonref} />
      <button onClick={showRef}>focus</button>
    </>
  );
}

export default App;

上次更新于: