我有一个包含数千个字符串的数组并传递给一个组件:
主要成分:
const array = ['name1', 'name2', 'name3'];
const [names, setNames] = useState(array);
const onClick = (index) => {
setNames(names.map((name, i) => {
if (i === index) {
return 'name changed';
}
};
};
return (
<ul>
{array.map((name, index) => (
<li key={index}>
<ShowName name={name} key={index} onClick={() => onClick(index)} />
</li>
)}
</ul>
);
ShowName 组件:
let a = 0;
export default function ShowName({ name, onClick }) {
a += 1;
console.log(a);
return (
<button type="button" onClick={onClick}>{name}</button>
);
}
还有一个按钮可以随机更改名称。但是每当按下按钮时,所有ShowName
组件都会重新渲染。我一直在尝试使用 useCallback 和 useMemo,但组件仍在重新渲染 x 次(x 是数组的长度)。
const ShowNameHoc = ({ name }) => {
return <ShowName name={name} />
};
return (
<div>
{array.map((name, index) => <ShowNameHoc name={name} key={index} />)}
</div>
);
如果我只想通过更改重新渲染组件,该怎么办?