javascript - 防止在反应中重新渲染数组内的某些组件
问题描述
假设,我有一个组件Parent
,我正在渲染这样的孩子。
const [items,setItems] = useState([1,2,3,4,5,6....]);
const [pointer,setPointer] = useState(0);
// inside return
{items.map((item,idx)=>{
return <ChildCanvas text={item} isPointer={pointer===idx} key={idx} idx={idx}/>
})}
pointer
并且items
两者都是同一组件中的不同状态。每当pointer
发生变化时,我都会在那个孩子里面做一些动画(pointer===idx)
。
一次,isPointer
仅适用于一个ChildCanvas组件。在这里,我期待,react 将重新渲染isPointer
道具已更改的孩子。
但是,每当isPointer
发生变化时,React 都会重新渲染所有ChildCanvas
组件。ChildCanvas
是一个沉重的组件,所以这使得页面(unresponsive for some time)
.
我如何检查某个特定
ChildCanvas
是否已重新渲染。
function ChildCanvas({text,isPointer,idx}){
console.log(`child ${idx} has been rerendered`);
return // code...
}
现在,每当pointer
发生变化时,我都会得到这个
child 0 has been rerendered
child 1 has been rerendered
child 1 has been rerendered
// up to the length of the array
我如何确保仅重新渲染其isPointer
道具已更改的组件。
解决方案
推荐阅读
- c++ - 为什么填充也放在聚合类型的末尾,而不仅仅是成员之间?
- python - 字符串地址
- reactjs - 呈现嵌套 JSON 数据的集合
- android - 在 Flutter/Android 上防止启动屏幕变黑
- arcgis - 是否可以在 ArcGIS Pro 中一次划分多个要素?
- javascript - 猫鼬将值添加到数组
- reactjs - 在 React Native 创建的 dom 元素中显示 id 或 name 属性
- r - 如何将“19”填充到字符串
- windows - Windows Docker Image 在 Azure 上不断挂起(网络应用程序)
- c++ - 使用不同方法计算函数时的不同结果 y = f(x)