是的,React.memo() 是一个高阶函数,用于优化组件的性能。它通过对组件的 props 进行浅比较来决定是否重新渲染组件。如果组件依赖于 props 的 id 去 fetch 数据,那么在每次渲染时,id 的值都会发生变化,导致 memo 失效。

解决这个问题的一种方法是,将 fetch 数据的逻辑移到组件外部,例如使用 useEffect 钩子来进行数据获取,并将数据作为 props 传递给组件。这样,只有在数据发生变化时,才会重新渲染组件。

示例代码:

import React, { useEffect, useState } from 'react';

const MyComponent = React.memo(({ id }) => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetchData(id);
  }, [id]);

  const fetchData = async (id) => {
    // 根据 id 去 fetch 数据
    const response = await fetch(`https://example.com/api/${id}`);
    const data = await response.json();
    setData(data);
  };

  return (
    <div>
      {/* 渲染数据 */}
      {data && <div>{data}</div>}
    </div>
  );
});

export default MyComponent;

在上述示例中,只有当 id 发生变化时,useEffect 钩子才会重新执行 fetchData,从而获取最新的数据,并更新组件。这样,即使使用了 React.memo(),组件也只会在 id 发生变化时重新渲染

reactjs v18 memo中如果依靠 props 的 id 去 fetch 数据那么memo就会失效

原文地址: https://www.cveoy.top/t/topic/iBgL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录