急救!react有什么最简单的深拷贝方法吗?

发布于 2022-09-11 17:29:31 字数 686 浏览 16 评论 0

问题描述

从后台拿到的数据有很多层,但是通过this.setState只能赋值到第一层,之前请求过类似的都不会出现这种情况.一来希望大神们能稍微解释一下,而来希望有一个能快速解决的方法。感激不尽

...
state = {
  listData: {}
}
...

fetchList({
  ...
})
.then(data => {
    console.log('data ====>', data);
    this.setState({
      listData: Object.assign({}, data);
    }, () => {
     console.log('listData =====>', this.state.listData);
    })
})

data深度的值无法正确复制给data

// console.log 1
data =====> {
  x1: xxx,
  x2: {
    x2_1: xxx,
    x2_2: xxx,
  },
  x3: {
    x3_1: xxx,
  }
//...
}

// console.log 2
listData ====> {
 x1: xxx,
 x2: {},
 x3: {},
}

第二层开始的都被过滤为空 无法赋值.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花辞树 2022-09-18 17:29:32

cdn引入lodash库,开发中能省不少事,你说的深拷贝用_.cloneDeep就能解决

终难遇 2022-09-18 17:29:31

可以尝试一下immutable.js

不管怎样,深拷贝总会带来性能问题,
可以从别的角度来解决这个问题,比如精简数据结构

以前只有一个state,现在拆分为多个,每次setState只更新其中某一项就行了

黯然#的苍凉 2022-09-18 17:29:31

let newObj = JSON.parse(JSON.stringify(oldObj))

温柔戏命师 2022-09-18 17:29:31

ES6中的Object.assgin()是实现浅拷贝的。JS深拷贝与浅拷贝,与React没关系的。
我们也在做React项目,给出两种解决方案吧
1、按楼主的想法,实现Object深拷贝:

JSON.parse(JSON.stringify(oldObj)); //简单粗暴没有之一,注意这个方法会忽略掉为undefined的属性,不过数据库一般存的是null而非undefined(后台一般是不会帮你把null转成undefined的,吃力不讨好~),所以也可能忽略这个缺点

2、完全没必要调用复制data,直接调用setStateReact会帮你处理复制的^_^

this.setState({
    listData: data
})

//然后在任意方法中console.log(this.state.listData)
结束~!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文