javascript - 反应变量变化,但它不应该
问题描述
我有一个问题大约 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 函数更新了我的所有变量这一事实使我的所有代码都无法正常工作。
谢谢你,我希望你能找到解决办法。(如果有一些错误,我很抱歉,我是法国人)
解决方案
JavaScript 通过引用传递对象,这就是原因。如果您想避免这种情况,请使用地图更改 for 循环
....
const toReturn = tab.map(item =>{
...
});
return toReturn
推荐阅读
- reactjs - 反应查询字符串
- docker - 使用 apt update 运行时,Docker 构建在 software-properties-common 上停止
- javascript - Cloud Firestore:查询两个集合
- reactjs - React Konva - 大量节点的性能
- javascript - 在按钮内居中对齐 ':after plus/minus sign'
- javascript - jQuery Switch Buttons,如果单击并且如果单击 == 1,您可以添加吗?
- python - 无法在 python 中找到文本的 xpath 元素
- javascript - React Native:如何将数据从屏幕传递到另一个?
- c++ - 无法在 Visual Studio 中打开文件
- java - 如果我们在 dockerfile 中使用 CMD,Docker 多阶段构建会失败