开发者问题收集

React UseState 钩子,无法连接数组

2020-07-13
11079

在 React 中尝试将两个数组加在一起时,我遇到了一些奇怪的行为。 每个数组块的长度为 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 返回一个空列表,无论是否有从上一个输入呈现的数据。不知何故,状态似乎没有持久化。 任何帮助都将不胜感激。

2个回答

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

setWordList(wordList => [...wordList, ...msg])
Rohan Agarwal
2020-07-13

如果您只想要一个包含连接项的数组,则可以使用:

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

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

但是,如果您希望拥有一个数组的数组...则需要:

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

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

Hcosta
2021-02-11