所以,我们知道,浅拷贝和深拷贝的区别是:浅拷贝
a=5;
b=a; // b point to a's address in the memory. if a changes, b changes.
深拷贝
a=5;
b=a; // b holds the actual value 5. if a changes, b remains the same.
酷,现在,我的问题是:传递状态作为孩子们的道具,是‘深’拷贝还是‘浅’复制?
我倾向于认为这是一个深层次的复制,然后又提出了另一个问题--这难道不是浪费资源吗?
干杯!
发布于 2022-09-21 06:21:02
将状态作为道具传递根本不复制任何东西。两个地方都使用完全相同的值。举个小小的例子:
let parentObj;
const App = () => {
const [parentStateObj, setParentStateObj] = React.useState({ prop: 'val' });
parentObj = parentStateObj;
return <Child obj={parentStateObj} />;
};
const Child = ({ obj }) => {
console.log(obj === parentObj);
return 'foo';
};
ReactDOM.createRoot(document.querySelector('.react')).render(<App />);
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<div class='react'></div>
这有点类似于您在第一个片段中的注释
// b指向内存中的a地址。如果a变化,b变化。
除了这个
如果其中一个值被重新分配(在父值或子值中),并且不会对另一个值产生任何影响--重新分配变量本身就没有side-effects
。
浅层复制通常指以下内容之一,实际上创建了一个单独的数组或对象:
const shallowCopyArr = [...arr];
const shallowCopyObj = { ...obj };
深度复制指的是递归地迭代对象或数组中的每个嵌套值,以创建一个新的值,即somewhat more complicated。
https://stackoverflow.com/questions/73796072
复制相似问题