react.js map遍历的问题
React遍历多个Ant Design中的Upload组件时,随意删除任一个Upload出现了bug,依次点击上传图片后,当点击删除时,倒着删除没有问题,从中间和从开头删问题出现了,出现了类似塌方的效果,要删除的Upload元素下面的Upload的元素下面的内容没有了。解决方法:将map遍历中的key={index}改为key={item}
import { Upload, message, Button, Icon } from 'antd';
class UploadImageContainer extends Component{
consructor(props){
super(props);
this.state = {
arr:[0, 1, 3]
};
}
removeItem=(delItem)=>{
this.setState(preState=>({
arr: preState.arr.filter(item=>item !== delItem)
}));
};
render(){
return(
<div>
{
this.state.arr.map((item, index)=>(
<div key={index}>
<Upload {...props}>
<Button>
<Icon type="upload" /> Click to Upload
</Button>
<button onClick={()=>removeItem(item)}>删除{item}</button>
</Upload>
</div>
))
}
</div>
)
}
}
export default UploadImageContainer;
key是一个字符串,用来唯一标识同父同层级的兄弟元素。当React作diff时,只要子元素有key属性,便会去原v-dom树中相应位置(当前横向比较的层级)寻找是否有同key元素,比较它们是否完全相同,若是则复用该元素,免去不必要的操作。
当React的render里不设置key 或者key={index} 时,每次新挂载的节点都是0(其他节点能在willreceiveprops中接检测到改变),因为逆序之后,最后一个元素是0,而这个元素的key之前是没有的,所以要新增节点。要实现目标,需要通过在App的render中设置key={arr.length-index}(因为本例的数组简单,设key={item}也可以),告诉react对应的位置不需要重新挂载。
react.js map遍历的问题的更多相关文章
- js Map 遍历
1. 在知道的key的情况下遍历map自然就跟数组一样的访. 2.在不知道key的情况下遍历map(此情况更多吧) 2.1 for(var key in Map){ }; //第一种 ...
- 应该用forEach改变数组的值吗? 原生JS forEach()和map()遍历的异同点
应该用forEach改变数组的值吗? https://segmentfault.com/q/1010000013170900?utm_source=index-hottest 由于js中的数组是引用类 ...
- 原生JS forEach()和map()遍历的区别以及兼容写法
一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
- js jquery 遍历 for,while,each,map,grep
js jquery 遍历 一,for循环. // 第一种var arr = [1, 2, 3];for(var i = 0; i < arr.length; i++) { console.log ...
- 原生JS forEach()和map()遍历,jQuery$.each()和$.map()遍历
一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
- js中三个对数组操作的函数 indexOf()方法 filter筛选 forEach遍历 map遍历
indexOf()方法 indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1. 不使用indexOf时 var arr = ['apple','orange','pea ...
- js的map遍历和array遍历
1. array遍历: [1].forEach() forEach是ES5中操作数组的一种方法,主要功能是遍历数组.forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- React JS 基础知识17条
1. 基础实例 <!DOCTYPE html> <html> <head> <script src="../build/react.js" ...
随机推荐
- 【原创】ABP源码分析
接口篇 IConventionalDependencyRegistra接口分析 待续.............. 模块篇 敬请期待...... 领域篇 敬请期待...... 消息篇 敬请期待..... ...
- python学习之思维导图
思维导图——牛刀小试 刚刚学完了python的网络编程,在复习整理知识点的过程中,了解到思维导图是一种强大的工具. 思维导图又叫心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种 ...
- [HNOI2011]Problem B
Description: 给定\(a\),\(b\),\(c\),\(d\),\(k\) 求: \(\sum_{i=a}^{b} \sum_{j=c}^{d} gcd(i,j)==k\) \(T\)组 ...
- C# 论接口的意义---共享协议
我对接口的理解: 接口是一种协议.是一种模型. 我认为接口的意义: 接口更好的实现了项目资源共享 , 指定了可共享的范围 , 允许可使用而不可篡改的项目资源 . 我认为接口和模型是一类的: 接口一般与 ...
- Oozie分布式工作流——流控制
最近又开始捅咕上oozie了,所以回头还是翻译一下oozie的文档.文档里面最重要就属这一章了--工作流定义. 一提到工作流,首先想到的应该是工作流都支持哪些工作依赖关系,比如串式的执行,或者一对多, ...
- JDBC(6)—BeanUtils
1.简介: BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品 2.Java 类的属性: 1>.在JavaEE中java类的属性通过getter和s ...
- 什么是SASS
一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一 ...
- 归一化(softmax)、信息熵、交叉熵
机器学习中经常遇到这几个概念,用大白话解释一下: 一.归一化 把几个数量级不同的数据,放在一起比较(或者画在一个数轴上),比如:一条河的长度几千甚至上万km,与一个人的高度1.7m,放在一起,人的高度 ...
- [Android Pro] 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
原文:https://blog.csdn.net/qq_24118527/article/details/82867864
- Linux系统管理员应该知道的journalctl知识
在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd开始统一管理了所有Unit的启动日志,这样带来的好处就是可以只用一个 journalctl命令,查看所有内核和应用的 ...