使用dva 的思考的一个问题,数组复制的必要
 *getTags({ payload }, { call, put }) {
            const response = yield call(getTags, payload);
            const arr = response.Data && response.Data.length > 0 ? response.Data : []
            arr.map(t => {
                if (t.Tags.length > 0) {
                    t.Tags.map(t2 => {
                        t2.isSelect = false
                    })
                }
            })
            yield put({
                type: 'querySuccess',
                payload: {
                    tagList: arr, // 作为源数据
                    tagQRList: arr,
                    tagMtList: arr,
                },
            });
            return response
        },
问题:tagList、tagQRList、tagMtList 将会共用一个内存地址,使用引用改变值时会影响另外2个,也即不能达到我们要的效果,以下办法没生效
            yield put({
                type: 'querySuccess',
                payload: {
                    tagList: arr,
                    tagQRList: [].concat(arr),
                    tagMtList: [].concat(arr),
                },
            });
以上是浅拷贝的方法:https://www.cnblogs.com/cccj/p/8660888.html
因为我的是需要深拷贝https://blog.csdn.net/qq_37268201/article/details/80448848
以下写法可以解决问题
  yield put({
                type: 'querySuccess',
                payload: {
                    tagList: arr, // 作为源数据
                    tagQRList: JSON.parse(JSON.stringify(arr)), // 深拷贝
                    tagMtList: JSON.parse(JSON.stringify(arr)), // 深拷贝
                },
            });
使用dva 的思考的一个问题,数组复制的必要的更多相关文章
- 算法题:合并N个长度为L的有序数组为一个有序数组(JAVA实现)
		昨天面试被问到这道算法题,一时没有回答上来,今天思考了一下,参阅了网上的教程,做了一个JAVA版本的实现. 方案一: 新建一个N*L的数组,将原始数组拼接存放在这个大数组中,再调用Arrays.sor ... 
- c语言经典算法——查找一个整数数组中第二大数
		题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ... 
- php foreach 语法的遍历来源数组如果不是一个有效数组php会出现错误警告 Invalid argument supplied for foreach()
		在php中,foreach语法的遍历来源数组如果不是一个有效数组,php会出现错误警告 Invalid argument supplied for foreach() ,但是很多时候这个数组是取自某些 ... 
- 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
		45.雅虎(运算.矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值 比如{3,2,4,3,6} 可以分成 {3,2,4,3,6} m=1; {3,6}{2,4 ... 
- 把一个一维数组转换为in ()
		把一个一维数组转换为in()形式. function dbCreateIn($itemList) { if(empty($itemList )){ return " IN ('') &quo ... 
- 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
		产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复 用一个ArrayList存储1到100然后随机产生0到arraylist.size()之间的数字作为下标然后从arrayli ... 
- java中将一个字符数组赋值给另一个,两者同时变化
		java中将一个字符数组赋值给另一个,两者的变化怎么是同步的?怎么才能让他们独立开? 比如有一个int[][] a 已经存在值,现在定义int[][] b=a;之后改变a的值,为何b也跟着改变?怎么才 ... 
- 一个PHP数组能占多大内存
		最近用PHP读取一个大文件把相关数据存放到数组中,之后处理并输出, 读取过程中发现占用内存很大, 于是很好奇这个问题. 简单的写一个代码 <?php $m1 = memory_get_usage ... 
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
		题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ... 
随机推荐
- Java 未来行情到底如何,来看看各界人士是怎么说的
			这是黄小斜的第102篇文章 作者 l 黄小斜 来源 l 公众号[程序员黄小斜](ID:AntCoder) 转载请联系作者(wx_ID:john_josh) Java从出生到现在已经走过了 20 多个年 ... 
- 海边拾贝-A-算法篇
			收集若干算法博客地址,不定期会更新: 算法 陈浩,leetcode 的C++解法 https://github.com/haoel/leetcode 王亮,很多题目讲解的比较详细 https:/ ... 
- 动画展现十大经典排序算法(附Java代码)
			0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序: ... 
- WPF 隐藏式控件
			没用Popup用的面板控件,全部代码使用xaml的触发器. 代码: <Grid> <DockPanel> <StackPanel Background=" Do ... 
- Docker安装redis的使用
			1.Docker安装redis的使用. docker search redis检索redis的服务.先检索再拉取. 2.这里我们拉取官方的镜像,标签为5.0.5.[root@slaver4 ~]# d ... 
- Kafka学习笔记之Kafka High Availability(下)
			0x00 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,B ... 
- 利用正则来查找字符串中第n个匹配字符索引
			1.string.IndexOf()方法可以获得第一个匹配项的索引 2.要获取第n个匹配项的索引: 方法1:利用IndexOf方法循环获取. 方法2:用正则来查找. System.Text.Regu ... 
- sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?
			sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?搜索了下都是说怎么隐藏的,隐藏后怎么恢复显示的没找到看进程还在运行,但调不出来看运行结果了,console ... 
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
			Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ... 
- js 过滤字符 和检测 特殊字符【转】
			// var str1 = str.replace(/\[\\'\\"\\\\\\/\\b\\f\\n\\r\\t\]/g, '');// 去掉转义字符 // var str2= str.r ... 
