首页 > 解决方案 > 反应变量变化,但它不应该

问题描述

我有一个问题大约 3 小时,我不明白为什么,

下面的代码应该解释我的问题:

import {useEffect} from 'react'

function shuffle(tab) {
  console.table(tab) //shows initialdata
  var i, j, tmp;
  for (i = tab.length - 1; i > 0; i--) {
      j = Math.floor(Math.random() * (i + 1));
      tmp = tab[i];
      tab[i] = tab[j];
      tab[j] = tmp;
  }
  return tab;
}

function App() {

  useEffect(() => {
    const initaldata = [{a:1}, {a:2}, {a:3}, {a:5}]
    console.table(initaldata) //shows initialdata
    const finaldata = initaldata 
    console.table(shuffle(finaldata)) //shows initialdata shuffled
    console.table(initaldata) //shows initialdata shuffled,  why ?

  }, [])
  return null;
}

我在一个函数中尝试了多种解决方案,例如孤立的“shuffle(initialdata)”。

shuffle 函数更新了我的所有变量这一事实使我的所有代码都无法正常工作。

谢谢你,我希望你能找到解决办法。(如果有一些错误,我很抱歉,我是法国人)

标签: javascriptjsonreactjsreact-hooks

解决方案


JavaScript 通过引用传递对象,这就是原因。如果您想避免这种情况,请使用地图更改 for 循环

....
const toReturn = tab.map(item =>{
...
});

return toReturn

推荐阅读