我看过很多文章说在react的render函数中定义内联函数会导致性能问题。
因此,他们建议在渲染函数之外定义函数,并在我需要的地方使用它(onClick
等)。
我建立了一个示例代码,我有一个按钮列表,每个按钮将增加列表中的索引状态,但其抛出错误。
如何在onClick
中传递参数而不使用内联函数
const App = () => {
const [number, setNumber] = useState(1);
const increaseNumber = (num) => {
setNumber((prevState) => prevState + num);
};
return (
<div>
{[...Array(5)].map((item, index) => (
<button key={index} onClick={increaseNumber(index)}>
{`increase by ${index}`}
</button>
))}
<div>{number}</div>
</div>
);
};
export default App;
3条答案
按热度按时间zy1mlcev1#
在回答这个问题之前,我会说,在尝试优化任何东西之前,您确实应该分析您的应用程序并确定特定的性能问题,在这种情况下,您可以使用data attributes来避免在每次Map迭代时创建新的回调。
通常情况下,只有当回调被用作子组件中的 prop 时,才需要为每个呈现创建一个新的回调。在这种情况下,使用类似
useCallback
的东西可以帮助避免不必要的子呈现。tgabmvqs2#
方法1:使用备忘录
当参数是固定的,就像你的情况一样,你可以使用
useMemo
:方法二: Package 器组件+ useCallback
创建自己的按钮组件并传递索引:
yzuktlbb3#
您可以将一个项目作为已记忆的函数传递给
react
按钮元素的onClick
prop。