React UseState钩子,无法连接数组

Posted

技术标签:

【中文标题】React UseState钩子,无法连接数组【英文标题】:React UseState hook, unable to concatenate arrays 【发布时间】:2020-11-02 08:32:57 【问题描述】:

我在尝试将两个数组添加在一起进行反应时遇到了一些奇怪的行为。 每个数组块的长度为 50 项。我的列表永远不会超过 50 个。

我已经尝试过使用扩展运算符和 concat 方法,有和没有包装函数。 没有任何作用

setWordList(wordList => wordList.concat(msg))
setWordList(wordList => [...wordList, msg]) 
setWordList([...wordList, msg]) 
setWordList(wordList.concat(msg)) 
  const [wordList, setWordList] = useState([])
  const [isSearching, setIsSearching] = useState(true)


  
  const loadMoreList = (data) => 
    console.log(data)
    setIsSearching(true)
    let already = []
    for(let i = 0; i < wordList.length; i++)
      already.push(_id: wordList[i]._id)
    
    console.log(already)
    socket.current.emit('get word list more', filter: data.filter, already: already);
  

  

  socket.current.on('word list in', (msg) => 
  
    setWordList(wordList => [...wordList, msg])
    
    console.log(msg)
    setIsSearching(false)
   
  );

示例数据(数组长度 = 50)

[
definition: "1. aufhören zu leben, sein Leben beschließen↵Beispiele↵“jung sterben”↵Wendungen, Redensarten, Sprichwörter↵“zum Sterben langweilig, müde, einsam o. Ä...."
id: "dfe03030-0c50-11ea-afa4-098be982e090"
leitner_no: 2
priority: true
priority_time: 1587986213134
reviews: 1
source: "manual"
source_details: "none"
time_stamp: 1583402873665
word: "sterben  | starb, gestorben |"
_id: "fb99b7c3-34a4-4e63-a98e-41efbbcfe5fc"]

当前列表和传入数据永远不会连接,新数据似乎已经替换了列表中的数据。 socket('word list in') 内的 wordListConsole.log 会返回一个空列表,无论是否有从前一个输入呈现的数据。不知何故,该状态似乎没有持续存在。 任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您只想要一个包含您将使用的串联项目的数组:

setWordList(wordList => [...wordList, ...msg])

结果是:["banana", "orange", "apple", "..."];

但是,如果您希望拥有一个数组数组......那么您会想要:

setWordList(wordList => [...wordList, msg])

那么结果将是:[[...array1],[...array2],[...whatever]];

【讨论】:

【参考方案2】:

两个数组都需要展开,像这样:

setWordList(wordList => [...wordList, ...msg])

【讨论】:

是我还是我们因为太多的 javascript 而习惯了这种可怕的东西?我从没想过这种行为会出现在任何其他语言中,并且在我看到这个的第二次就会放弃那种语言,只是网络把我们都迷上了 JS ????

以上是关于React UseState钩子,无法连接数组的主要内容,如果未能解决你的问题,请参考以下文章

在对数组进行排序并传递它之后,React 钩子 useState/setState 不起作用

使用 React 的 useState 钩子时输入可空状态的正确方法

无法使用钩子在 React 中设置状态

React Native Jest - 如何使用多个钩子测试功能组件?无法存根 AccessiblityInfo 模块

无法使用 Typescript 中的 React 钩子在 Ag-Grid 中获取 gridApi

如何为 React 钩子(useState 等)做流类型注释?