首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReactJS -父母州作为浅拷贝或深拷贝传递给孩子?

ReactJS -父母州作为浅拷贝或深拷贝传递给孩子?
EN

Stack Overflow用户
提问于 2022-09-21 06:12:23
回答 1查看 57关注 0票数 0

所以,我们知道,浅拷贝和深拷贝的区别是:浅拷贝

代码语言:javascript
运行
复制
a=5;
b=a; // b point to a's address in the memory. if a changes, b changes.

深拷贝

代码语言:javascript
运行
复制
 a=5;
 b=a; // b holds the actual value 5. if a changes, b remains the same.

酷,现在,我的问题是:传递状态作为孩子们的道具,是‘深’拷贝还是‘浅’复制

我倾向于认为这是一个深层次的复制,然后又提出了另一个问题--这难道不是浪费资源吗?

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-21 06:21:02

将状态作为道具传递根本不复制任何东西。两个地方都使用完全相同的值。举个小小的例子:

代码语言:javascript
运行
复制
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 />);
代码语言:javascript
运行
复制
<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

  • If,则不会发生
  • No复制--其中一个值会发生变异(在父值或子值中)--而如果设置要观察的内容,则更改在两个组件中都是可见的--您应该进行never mutate state in React。相反,您应该使用新的状态调用状态设置程序,然后该状态将触发重呈现.

浅层复制通常指以下内容之一,实际上创建了一个单独的数组或对象:

代码语言:javascript
运行
复制
const shallowCopyArr = [...arr];
const shallowCopyObj = { ...obj };

深度复制指的是递归地迭代对象或数组中的每个嵌套值,以创建一个新的值,即somewhat more complicated

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73796072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档