Reactjs 如何正确初始化状态数组
我需要用六个元素点初始化一个状态数组,然后在调用setVote函数时更新points数组中的适当元素:Reactjs 如何正确初始化状态数组,reactjs,Reactjs,我需要用六个元素点初始化一个状态数组,然后在调用setVote函数时更新points数组中的适当元素: const [selected, setSelected] = useState(0) const setNextItem = (value) => setSelected(value) const initialValue = new Array(6).fill(0); const [points, setPoint] = useState(initialValue) const s
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;
}
但是,当我在控制台窗口中查看点和复制阵列时,点永远不会使用“复制”更新。它保持为数组(6)[0,0,0,0,0,0]。它总是在初始化还是拷贝数组没有重新调整。正确的方法是什么
这是我的最终代码:
```
const App = () => {
const [selected, setSelected] = useState(0)
const [points, setPoints] = useState(new Array(6).fill(0))
const setNextItem = (value) => setSelected(value)
const setVoteAt = (value) => setPoints(value)
console.log(selected, points)
const next_button = {
name : 'next item',
onClick: () => setNextItem(Math.floor((Math.random() * 5) + 0))
}
const vote_button = {
name : 'vote',
onClick: () => setVoteAt(UpdatePoints(selected))
}
const UpdatePoints = (index) => {
let copy = [...points]
copy[index]++
return copy
}
```
看起来它在大部分情况下都应该有效。我想说这两个功能是相互冲突的,并导致了一个问题。控制台中是否返回任何错误
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]
看起来它在大部分情况下都应该有效。我想说这两个功能是相互冲突的,并导致了一个问题。控制台中是否返回任何错误
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]
太多重复的函数和状态
只要点一点密码
react useState不是rective,然后您可以对控制台执行useEffect。
然后您将看到更新数组
const [points, setPoints] = useState(new Array(6).fill(0));
const UpdatePoints = (selected) => {
let copy = [...points];
copy[selected]++;
setPoints(copy);
}
const random = () => Math.floor((Math.random() * 5) + 0)
useEffect(() => console.log(points))
return (
<div onClick={() => UpdatePoints(random())}> ClickMe </div>
);
const[points,settpoints]=useState(新数组(6).fill(0));
常量更新点=(选定)=>{
让copy=[…点];
复制[所选]+;
设定点(副本);
}
const random=()=>Math.floor((Math.random()*5)+0)
useffect(()=>console.log(点))
返回(
UpdatePoints(random())}>ClickMe
);
重复的函数和状态太多
只要点一点密码
react useState不是rective,然后您可以对控制台执行useEffect。
然后您将看到更新数组
const [points, setPoints] = useState(new Array(6).fill(0));
const UpdatePoints = (selected) => {
let copy = [...points];
copy[selected]++;
setPoints(copy);
}
const random = () => Math.floor((Math.random() * 5) + 0)
useEffect(() => console.log(points))
return (
<div onClick={() => UpdatePoints(random())}> ClickMe </div>
);
const[points,settpoints]=useState(新数组(6).fill(0));
常量更新点=(选定)=>{
让copy=[…点];
复制[所选]+;
设定点(副本);
}
const random=()=>Math.floor((Math.random()*5)+0)
useffect(()=>console.log(点))
返回(
UpdatePoints(random())}>ClickMe
);
如何正确初始化状态数组
用于正确初始化它。这类似于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()
操作不正确。每次通过以下方式更改选定的时,您都可以更新点
:
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]
如何正确初始化状态数组
用于正确初始化它。这类似于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()
操作不正确。每次通过以下方式更改选定的时,您都可以更新点
:
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]
我不太清楚setVote
的作用,因为它被定义了两次。你是想给最后一个函数起个别的名字吗?谢谢你的回复。我将尝试这些,并让每个人都知道结果。我不太确定setVote
的作用,因为它被定义了两次。你是想给最后一个函数起个别的名字吗?谢谢你的回复。我将尝试这些,并让每个人都知道结果。