【问题标题】:setState of an empty array空数组的 setState
【发布时间】:2020-12-23 09:49:06
【问题描述】:

我正在编写一个代码,其中有一个空数组,必须在某个请求返回后填充。

我试过setState这样的数组:

const [recentTransactionContacts,setRecentTransactionContacts] = useState<object[]>([])
///// more code

Contacts.getAll((err, contacts) => {
       if(err) throw err
                    
       if(contacts.length > 0)
           setRecentTransactionContacts(prevState => ({...prevState.recentTransactionContacts, ...contacts}));
       else 
           ToastAndroid.show(`There no contacts on your phone. Can't transfer`, ToastAndroid.SHORT) 
})

现在,在尝试以这种方式执行setState 之后,我看不到联系人数组有任何变化。 我可以更新状态的唯一方法是:

setRecentTransactionContacts(contacts)

但是,我认为后者不是正确的方式。

更新数组状态的正确方法是什么?

【问题讨论】:

  • setRecentTransactionContacts([... recentTransactionContacts ,...contacts]) 怎么样?

标签: reactjs react-native setstate


【解决方案1】:

我认为这应该适用于您的情况,recentTransactionContacts 在此行运行后不会更改,因此您无需访问 prevState 即可执行您想要的操作。

setRecentTransactionContacts([...recentTransactionContacts, ...contacts]);

【讨论】:

    【解决方案2】:

    在当前状态可能发生更改或陈旧的情况下,需要使用prevStateupdater function,这似乎不是这里的情况。事实上,它可能是 prevState 本身导致问题,因为 prevState 值在运行时可能是 undefined

    如上所述,将您的方法替换为 setRecentTransactionContacts([...recentTransactionContacts, ...contacts]); 它将接受当前状态值并将联系人附加到状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-16
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2018-09-03
      相关资源
      最近更新 更多