javascript - 地图中的内联函数
问题描述
避免循环中的内联函数的最有效方法是什么:
const SomeComponent = () => {
const handler = (idx) => console.log(idx);
return (<>
[...Array(100)].map((_, index) => (
<div onClick=(() => handler(index))>Click me {index}</div>
</>);
}
猜猜这有点过度设计
const OtherComp = ({ index, onClick, children }) => {
const handle = () => { onClick(index); }
return <div onClick={handle}>{children}<div/>
}
const SomeComponent = () => {
const handler = useCallback((idx) => console.log(idx), []);
return (<>
[...Array(100)].map((_, index) => (
<OtherComp onClick=(handler)>Click me {index}</div>
</>);
}
我正在考虑的“问题”是/是:
- 垃圾收集器(几乎不在乎)
- 在循环中创建“相同”函数
- 随着输入道具的变化,每次点击都会重新渲染所有子元素 - 假设点击正在改变选定的 div
解决方案
我认为这完全没问题。根本不可能对性能产生任何影响。但是,如果这是您关心的问题,因为index
是在回调范围内.map
,我能想到的唯一其他选择是让处理程序检查其周围的 DOM 以获取索引:
<div onClick={handler}>Click me {index}</div>
const handler = (e) => {
const div = e.currentTarget;
const index = [...div.parentElement.children].indexOf(div);
console.log(index);
};
但是 using{() => handler(index)}
是一种更加 React-ish 的风格,并且更容易阅读和理解 - 我更喜欢在所有情况下尽可能使用它。
推荐阅读
- localization - Stripe:是否可以为每个请求设置语言环境(以便获得正确语言的错误消息)?
- python - 优化训练 gru 中的 ram 使用
- csv - 有没有办法在仅使用 Vue.js 的网站中“获取”类似 csv 的信息?
- sql - 如何通过 SQL Server 从 XML 中的节点获取值
- python - 解析财务报表中的负数
- facebook - AMP 页面中的 Facebookpixel ViewContent
- javascript - javascript:正则表达式的问题
- listview - 根据搜索栏中给出的字符串搜索 ObservableCollection 列表
- c# - iTextSharp,如何在 pdf 文档中使用我自己的字体
- kubernetes - Kubernetes 入口条件路由