我需要初始化一个包含六个元素,点的状态数组,然后在调用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;
}
答案 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]