Javascript 如何从react native中的映射对象中删除所有其他ID?
我有一个函数,它从数组中接收一个项目id,并将其映射为设置一个选定状态,以显示我已单击该项目Javascript 如何从react native中的映射对象中删除所有其他ID?,javascript,react-native,Javascript,React Native,我有一个函数,它从数组中接收一个项目id,并将其映射为设置一个选定状态,以显示我已单击该项目 const onSelect = React.useCallback( id => { const newSelected = new Map(selected); newSelected.set(id, !selected.get(id)); setSelected(newSelected);
const onSelect = React.useCallback(
id => {
const newSelected = new Map(selected);
newSelected.set(id, !selected.get(id));
setSelected(newSelected);
},
[selected],
);
这是我的状态:
const [selected, setSelected] = useState(new Map());
我只希望同时选择一个项目,因此,如果我单击一个项目,其他项目的状态必须设置为false。当您克隆
选定时,如果键等于id
,则将其展开并生成带切换值的新条目,如果键不等于则为false
:
const onSelect = React.useCallback(
id => {
const newSelected = new Map([...selected].map(([key, value]) => [key, key === id ? !value : false]));
setSelected(newSelected);
},
[setSelected, selected], // both are needed
);
此外,在这种情况下,useCallback
几乎没有效果。由于所选的经常更改,useCallback
无法使用已记忆的函数,因此会生成一个新函数。要解决此问题,请将函数传递给useState
,然后从依赖项数组中删除selected
const onSelect = React.useCallback(
id => setSelected(sel => new Map([...sel].map(([key, value]) => [key, key === id ? !value : false])),
[setSelected]
);
代码段的原始功能似乎是在当前选定项被选中时切换选定状态-此解决方案似乎没有保留该功能。我收到一个错误,我在函数上使用了副作用,我应该使用useEffect,它工作正常,但我如何删除该消息?您是否尝试过第二个片段?所有这些都与useEffect无关。粘贴错误消息和相关代码。你可能想开始一个新问题。