gpt4 book ai didi

javascript - react 备忘录组件并在将函数作为 Prop 传递时重新渲染

转载 作者:数据小太阳 更新时间:2023-10-29 05:24:24 26 4
gpt4 key购买 nike

假设我有这些 React 组件:

const Compo1 = ({theName}) => {
return (
<Nested foo={() => console.log('Dr. ' + theName)}/>
);
};

const Compo2 = ({theName}) => {
function theFoo() {
console.log('Dr. ' + theName);
}
return (
<Nested foo={theFoo}/>
);
};

嵌套组件,包裹在 memo 中:

const Nested = React.memo(({foo}) => {
return (
<Button onClick={foo}>Click me</Button>
);
});

传入foo的函数是always recreatedCompo1Compo2 中,正确吗?

如果是这样,因为foo每次都会接收到一个新的函数,是不是意味着memo就没有用了,所以Nested会一直re -渲染?

最佳答案

您可以使用新的钩子(Hook) Api(React >= 16.8) 来避免重新创建回调函数。

只需为此使用 useCallback 钩子(Hook)。

例如

父组件

import React, { useCallback} from 'react';

const ParentComponent = ({theName}) => {
const theFoo = () => {
console.log('Dr. ' + theName);
}

const memoizedCallback = useCallback(theFoo , []);

return (
<Nested foo={memoizedCallback}/>
);
};

useCallback 将返回回调的内存版本,只有在其中一个依赖项发生变化时才会发生变化(在第二个参数中传递)在这种情况下,我们将空数组 作为依赖项传递,因此该函数将只创建一次。

和嵌套组件:

import React, { memo } from 'react';

const Nested = ({foo}) => (
<Button onClick={foo}>Click me</Button>
);

export default memo(Nested);

了解更多信息 - https://reactjs.org/docs/hooks-reference.html#usecallback

关于javascript - react 备忘录组件并在将函数作为 Prop 传递时重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com