(React Native - Expo) 最后选择的对象没有添加到钩子数组

(React Native - Expo) The last seleted object is not added to hook array

当我尝试将对象添加到组件内的挂钩时,它工作正常 - 有点。 似乎无论我做什么来更新所有选定项目的挂钩。它总是缺少最后选择的对象。这也是在删除对象时。

假设我选择了项目 1、2、5 - 然后挂钩丢失了 5 假设我选择了 1、2、4、5,但随后取消选择了 2,然后挂钩获得了所有选定项但没有取消选择项目 2。

这是我的代码..

const [selected, setSelected] = React.useState<string[]>()

React.useEffect(() => {
    const getBrands = async () => {
       const user = await getUser()
       setSelected(user?.brands)
    }
    getBrands()
}
, [])

const toggleSelection = async(item: string) => {
    console.log("clicked: ", item)
        if (selected === undefined){
            setSelected([item])
        }
        if (selected?.includes(item)) {
            setSelected(selected.filter((i) => i !== item))
        } else {
            setSelected([...selected, item])
           
        }
        await updateUser({brands: selected})
 }

这是控制台输出:

 clicked:  2
    Updating with  Object {
    "brands": Array [
      "1",
      "3",
      "5",
    ],
    }
clicked:  4
Updating with  Object {
  "brands": Array [
    "1",
    "3",
    "5",
    "2",
  ],

我认为这个问题是重复的,请检查这个

我希望这个解决方法对你有用:

...  
const toggleSelection = (item: string) => {
    console.log("clicked: ", item)
        if (selected === undefined){
            setSelected([item])
        }
        if (selected?.includes(item)) {
            setSelected(selected.filter((i) => i !== item))
        } else {
            setSelected([...selected, item])
           
        }
 }

 useEffect(() => {
   // 'selected' will be updated here
    async function asyncCall() {
     if(selected.length>0)
     await updateUser({brands: selected})
    }
   asyncCall();
  }
 , [selected])