Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从react native中的映射对象中删除所有其他ID?_Javascript_React Native - Fatal编程技术网

Javascript 如何从react native中的映射对象中删除所有其他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);

我有一个函数,它从数组中接收一个项目id,并将其映射为设置一个选定状态,以显示我已单击该项目

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无关。粘贴错误消息和相关代码。你可能想开始一个新问题。