分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

react.js map遍历的问题

发布时间:2023-09-06 01:40责任编辑:赖小花关键词:js遍历

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遍历的问题

原文地址:https://www.cnblogs.com/axl234/p/8390522.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved