【问题标题】:useRef not tracking selected items in dropdownuseRef 不跟踪下拉列表中的选定项目
【发布时间】:2020-04-19 20:32:49
【问题描述】:

我有动态下拉菜单,我使用 useRef 来跟踪已选择的内容,以便下一个下拉菜单不会显示已选择的项目。但是,当我删除一个项目时,以前的下拉菜单会再次显示所有选项。

但是,当我删除一个项目时,其他下拉菜单不会跟踪仍然选中的所有内容。

例如这里,如果你创建 3 个项目,选择 1 到 3,然后删除最后一个。如果您返回第一个下拉菜单,您会看到选项 2 在左侧,即使它已经被选中。 https://codesandbox.io/s/actions-selector-t7nbk?file=/ObjectList.jsx

  const gSettings = useRef(globalSettings);
  const [object, setObject] = useState('user');
  const objectOptions = (
    objects.filter(i => !gSettings.current.map(i => i.object).includes(i)) || []
  ).map(i => ({ value: i, label: i }));

【问题讨论】:

    标签: javascript reactjs ecmascript-6


    【解决方案1】:

    你是shadowing你的i这个语句中的变量:

    objects.filter(i => !gSettings.current.map(i => i.object).includes(i))
                   ^                           ^
    

    map 回调中使用不同的变量名,例如k

    objects.filter(i => !gSettings.current.map(k => k.object).includes(i))
    

    或者你可以移动上面的内部map

    const selectedOptions = gSettings.current.map(i=> i.object)
    objects.filter(i => !selectedOptions.includes(i))
    

    附带说明一下,这将有助于使变量名称更加明确。

    【讨论】:

    • 啊,解决了这个问题,但不幸的是,这并没有解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多