如何正确初始化状态数组React JS

时间:2019-09-01 20:36:02

标签: reactjs

我需要初始化一个包含六个元素,点的状态数组,然后在调用setVote函数时更新点数组中的适当元素:

fetch

但是,当我在控制台窗口中查看点并复制数组时,点永远不会随着复制而更新。它保持为Array(6)[0,0,0,0,0,0]。它总是初始化还是不重新调整副本阵列。正确的方法是什么?

这是我的最终代码:

const [selected, setSelected] = useState(0)
const setNextItem = (value) => setSelected(value)
const initialValue =  new Array(6).fill(0);
const [points, setPoint] = useState(initialValue)
const setVote = (value) => setPoint(value)

// randomly choose the next item
const setNextitem(Math.floor((Math.random() * 5) + 0))

const setVote => {            
    const copy = [...points]
    copy[selected] += 1 
    return copy;
}

3 个答案:

答案 0 :(得分:0)

似乎应该可以正常工作。我想说这两个功能是冲突的,并且会引起问题。控制台中是否返回任何错误?

const setVote = (value) => setPoint(value)
const setVote => {            
    const copy = [...points]
    copy[selected] += 1 
    return copy;
}

您可能要重命名的最后一个。像setVoteAt这样的东西,它需要为其设置投票的索引参数。

const setVoteAt = (index) => {            
    const copy = [...points]
    copy[index] += 1 
    return copy;
}

setVoteAt(2) // [0, 0, 1, 0, 0, 0]

答案 1 :(得分:0)

功能和状态重复太多

只需订购一下代码即可。

react useState不是指令性的,则可以使用useEffect进行控制台。 然后您将看到更新数组。

adb shell 'pm list packages -f'

答案 2 :(得分:0)

  

如何正确初始化状态数组React JS

使用useEffect对其进行正确初始化。这类似于componentDidMount

const [points, setPoints] = useState([])

useEffect(() => 
  {
    const initialValue =  new Array(6).fill(0);
    setPoints(initialValue);
  }
, []) // initialize only once (on mount) and not on every render

  

是始终初始化还是不重新调整副本数组。正确的方法是什么?

setVote()工作不正确。每次更改points时,您可以更新selected

useEffect(() => 
  {
    setPoints(points => {
      points[selected] += 1
      return points
    })
  }
  , [selected] // only run this effect every time selected changed
)

setNextItem(2) // this will update selected then run the effect on top
               // and also increment points[selected]