Reactjs 如何正确初始化状态数组

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

我需要用六个元素点初始化一个状态数组,然后在调用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 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
的作用,因为它被定义了两次。你是想给最后一个函数起个别的名字吗?谢谢你的回复。我将尝试这些,并让每个人都知道结果。