【发布时间】:2021-05-29 20:56:24
【问题描述】:
我有一个使用循环创建多个组件的组件,但我只需要重新渲染正在修改的实例,而不是其余的。这是我的方法:
function renderName(item) {
return (
<TextField value={item.value || ''} onChange={edit(item.id)} />
);
}
function renderAllNames(items) {
const renderedItems = [];
items.forEach(x => {
const item = React.useMemo(() => renderName(x), [x]);
renderedItems.push(item);
});
return renderedItems;
};
return (
<>
{'Items'}
{renderAllNames(names)};
</>
);
这让我大喊,钩子调用比之前的渲染要多。改为尝试:
function renderAllNames(items) {
const renderedItems = [];
items.forEach(x => {
const item = React.memo(renderName(x), (prev, next) => (prev.x === next.x));
renderedItems.push(item);
});
return renderedItems;
};
也没有用...基本方法可以正常工作
function renderAllNames(items) {
const renderedItems = [];
items.forEach(x => {
renderedItems.push(renderName(x));
});
return renderedItems;
};
但是每次我编辑任何字段时它都会渲染所有动态组件,那么我怎样才能记住这个以便仅重新渲染正在编辑的项目?
【问题讨论】:
-
能否提供组件的完整代码?
标签: reactjs react-hooks memoization