reactjs - React useCallback 钩子(Hook)用于 map 渲染

标签 reactjs react-hooks usecallback

将回调传递给组件时,我应该使用 useCallback Hook 返回内存回调(以防止不需要的渲染):

import doSomething from "./doSomething";
const FrequentlyRerenders = ({ id }) => {
  const onEvent = useCallback(() => doSomething(id), [id]);
  return (
    <ExpensiveComponent onEvent={ onEvent } />
  );
};

但是如果我使用 map 怎么办?例如:

import doSomething from "./doSomething";
const FrequentlyRerendersMap = ({ ids }) => {
  return ids.map(id => {
    const onEvent = useCallback(() => doSomething(id), [id]);
    return (
      <ExpensiveComponent key={id} onEvent={ onEvent } />
    );
  });
};

我应该如何正确使用useCallback?以上是传递多个回调的正确方法吗?它真的有效并且知道根据数组的一项来内存每个回调吗?

最佳答案

将返回的映射的JSX转换成组件,然后就可以使用Callback了,没有问题

import doSomething from "./doSomething";
const MappedComponent =(props) => {
   const onEvent = useCallback(() => doSomething(props.id), []);
   return (
      <ExpensiveComponent onEvent={ onEvent } />
   );
}

const FrequentlyRerendersMap = ({ ids }) => {
  return ids.map(id => {
    return <MappedComponent key={id} id={id} />
  });
};

关于reactjs - React useCallback 钩子(Hook)用于 map 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963914/

相关文章:

reactjs - React useEffect - 在依赖数组中传递一个函数

Javascript/React - 关于 .focus() 行为的问题

javascript - react 采取错误验证的多步骤形式

javascript - 从 React.js 中的另一个类组件调用函数

ReactJS:TypeError:无法读取 null 的属性(读取 'useRef')

javascript - React Hooks 状态变量在 setTimeout 函数期间未更新

javascript - 为什么 `useCallback` 不能总是返回相同的 ref

javascript - React useCallback with debounce 适用于旧值,如何获得实际状态值?

javascript - React 的差异算法如何处理元素列表?

javascript - 有没有一种方法可以使用 material ui @next React 将不同的字体添加到 Typography 中的不同属性