在 useState 中更新 Map 时避免重新渲染组件

猫鼬

如何在不触发 React 组件的重新渲染的情况下在 useState 中填充 Map?

const [myMap, setMyMap] = useState(new Map());

我将键值放在那里,但每次使用时都会重新渲染组件

const insertToMap = (myMap, setMyMap, k, v) => {
myMap[k] = v;
  setMyMap(myMap);
}

要么

const insertToMap = (myMap, setMyMap, k, v) => {
myMap[k] = v;
  setMyMap(myMap.set(k, v));
}

如何在不导致重新渲染的情况下填充地图?

某些表演

如果在渲染时根本不考虑地图,那么您可以对其进行变异 - 在这种情况下,使用 ref 比使用状态更有意义:

const myMapRef = useRef(new Map());
// reference myMapRef.current to get to the map

还要注意的是,如果你想使用地图作为地图,你应该使用地图的方法.set.get以及.has

const insertToMap = (myMap, k, v) => {
  myMap.set(k, v);
};

如果您想使用括号表示法来存储值,您几乎肯定应该使用普通对象,例如

const myObjRef = useRef({});
myObjRef[k] = v;

如果您真的希望更改值不会导致重新渲染。但鉴于

我希望根据重新渲染时的地图正确渲染每个复选框的选中道具

听起来这真的应该是有状态的 - 您几乎肯定应该希望更改值以立即选中或取消选中复选框(通过状态更改和由此产生的重新渲染)。

能够轻松克隆有状态值是件好事,这样设置它们的状态(不改变当前处于状态的对象)就不会太乏味。考虑使用对象而不是 Map,并且:

const [checkboxes, setCheckboxes] = useState({});
const insert = (k, v) => {
  setCheckboxes({ ...checkboxes, [k]: v });
};

如果在状态更新之前多次调用此函数,请改用回调形式:

setCheckboxes(checkboxes => ({ ...checkboxes, [k]: v }));

我的第一个想法是在不触发重新渲染的情况下填充地图

如果所有初始 setter 同步发生,则无需担心。您也可以在调用此组件之前填充它,并将填充的对象作为道具向下传递。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

useState不会更新组件重新渲染时的值

当 useState 更新时,map 循环在 useState 中的对象内部的数组中不起作用。反应 js

从组件中的useState多次调用状态更新程序会导致多次重新渲染

从流式音频功能更新 useState 时无限重新渲染

useState挂钩更新时,组件未重新呈现

重新渲染後未更新 useState 中的初始值

输出组件循环并避免仅更新一个组件时重新渲染整个循环

React useState更新未重新呈现组件

避免在React中重新渲染子组件

如何避免在React中重新渲染组件?

防止重新渲染在包装器组件中启动 useState 的同级组件

重新渲染时如何更新组件状态

在 mobx 中更新状态时组件不会重新渲染

useState 不强制重新渲染反应组件

React Hook [useState]:更新状态并重新渲染视图

更新状态而不渲染整个 React 组件(useState)

当子组件在react钩子中调用useState()时,如何实现条件渲染?

“ useState”,仅在对象中的值更改时更新组件

如何避免在React-Redux连接的组件中重新渲染?

当使用React Router在ReactJS中渲染参数组件时,如何避免不必要地重新渲染HOC组件

useState 不在 array.map() 内更新。ReactJS

反应useState重新渲染

在onClick函数中调用更新函数时,useState不重新呈现

更新 useState 时 React JS 更新类

在 useState 更新后防止渲染相機

在状态更新函数中调用状态更新函数 - React Functional 组件中的 useState 钩子

使用useState挂钩更改道具时,组件不会重新渲染

更新嵌套对象时,UseState不重新呈现

useState不会使用组件更新状态