从零开始学习React——(七):React列表循环数据以及事件绑定

2023-10-31

本节主要介绍React中列表循环展示数据以及事件的绑定。

1. 列表循环数据化

目前Child.js组件中的<li>标签内的数据是静态的,也就是死的。如果要换成动态的。就需要把这个列表进行数据化之后再用JavaScript代码循环在页面上。

首先,在上一节中。定义过了一个空的list数组。这节课先把list数组添加两个数组元素。代码如下:

	// 省略上面部分无关代码
	constructor(props) {
		super(props)
		this.state = {
			inputValue: 'test',
			// --- 主要代码 start ---
			list: ['测试文字1', '测试文字2']
			// --- 主要代码 end ---
		}
	}

有了数据之后,可以在利用JSX部分进行循环输出,代码如下:

	// 省略上面部分无关代码
	render() {
		return (
			// 根部文件包裹起来
			<Fragment>
				<div>
					<input value = {this.state.inputValue} onChange = {this.inputChange.bind(this)} />
					<button>增加</button>
				</div>
				<ul>
					{
						this.state.list.map((item, index) => {
							return <li>{item}</li>
						})
					}
				</ul>
			</Fragment>
		)
	}

通过上述代码,返回浏览器页面之后发现数据就不再是固定的了。

2. 增加数据选项

要增加项目,需要在增加按钮上绑定一个方法this.addItem(这个方法目前还没有,需要自己建立)

	<button onClick = {this.addItem.bind(this)}> 增加 </button>

接下来就是定义增加的方法函数,注意: 写在render()之外。

	addItem() {
		this.setState({
			list: [...this.state.list, this.state.inputValue],
			// 这段代码用于将输入项新增到项目之后情况输入框
			inputValue: ''
		})
	}

上述代码要说的是...这个属于es6的扩展运算符,意思就是将list数组进行分解,和后面的this.state.inputValue变量组合形成一个新的数组。这种写法更简单和直观。因此比较推荐这样。

另外:之所以不用push方法是因为:

  • this.state里面定义的数据必须通过this.setState来改变。这个涉及到单向数据流。
  • push方法返回的是新数组的长度,是数字,而不是新的数组。

3. 解决key值错误

此时,再返回浏览器打开F12控制台就会发现有报错。根据报错可以简单看出是Key值没有设置。Key的作用涉及到在虚拟DOM中因为比对而导致的性能问题。因此建议在写循环的时候都加上Key值。这个现在也是React的硬性要求。同时,Key值在该循环中必须是独一无二的。
解决方式如下:

	<ul>
		{
			this.state.list.map((item, index) => {
				return <li key = {index + item}>{item}</li> 
			})
		}
	</ul>

注:一般开发人员在写Key值的时候喜欢用index。这在长久来看对性能是有影响的。很多公司后端接口中会返回一个字段,里面包含的是一个独一无二的值。如果后端没有返回这个字段的话,可以尝试使用上面的方式。index + item,这样就能尽可能的防止重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始学习React——(七):React列表循环数据以及事件绑定 的相关文章

随机推荐

  • STM32--CAN ID过滤器分析

    1 前言 在CAN协议里 报文的标识符不代表节点的地址 而是跟报文的内容相关的 因此 发送者以广播的形式把报文发送给所有的接收者 节点在接收报文时 根据标识符 CAN ID 的值决定软件是否需要该报文 如果需要 就拷贝到SRAM里 如果不需
  • 配合插件flatten-maven-plugin及${revision}属性在maven多模块项目中可进行全局版本号管理

    父pom
  • 【原创】基于FPGA的数码管按键显示(two_key)

    文档说明 一 背景介绍 心理一直有个疙瘩 总感觉不把数码管玩的溜些 觉得少了些什么东西 念头不通畅 说什么也要拿下 于是 有了这篇文档的产生 二 项目需求 选用开发板上的2个按键 当s1按下后 key cnt计数加2 当s2按下后 key
  • 函数printf()的格式转换

    知识点自用 c语言程序设计p43
  • C# 简介(详细)

    C 是一个现代的 通用的 面向对象的编程语言 它是由微软 Microsoft 开发的 由 Ecma 和 ISO 核准认可的 C 是由 Anders Hejlsberg 和他的团队在 Net 框架开发期间开发的 C 是专为公共语言基础结构 C
  • Android Framework学习(七)之Thread类以及常用同步类

    前言 Thread类是Android为线程操作而做的一个封装 代码在Thread cpp中 其中还封装了一些与线程同步相关的类 本篇博客 我们一起学习Thread类以及常用同步类 Thread类 Thread类的构造函数中的有一个canCa
  • 漫画:什么是服务熔断?

    点击上方 程序员小灰 选择 置顶公众号 有趣有内涵的文章第一时间送达 小灰的答题策略 是遇到难题不断思考 不断思考 一直到考试结束为止 可以用下面这张图流程图来表示 大黄的答题策略 是遇到难题先尝试几次思考 如果尝试一定次数不成功 则果断放
  • vcruntime140_1.dll文件下载及安装方法,详细修复方案

    最近在玩游戏跟打开ps的时候 电脑莫名出现上出现了一个名为vcruntime140 1 dll的错误提示 这个错误提示让我无法正常运行一些软件和游戏 给我的电脑使用带来了很大的困扰 第一时间我就在网上翻阅各种关于vcruntime140 1
  • Python机器视觉--OpenCV进阶(核心)--滤波器之卷积介绍

    滤波器之卷积介绍 1 卷积 1 1 什么是图片卷积 图像卷积就是卷积核在图像上按行滑动遍历像素时不断的相乘求和的过程 1 2 卷积步长 步长就是卷积核在图像上移动的步幅 上面例子中卷积核每次移动一个像素步长的结果 如果将这个步长修改为2 结
  • 根据指定时间获取时间(日,周,月,季度,年)

    package Test import java text ParseException import java text SimpleDateFormat import java util TODO author biao date 20
  • linux下安装使用libuuid

    UUID简介 UUID含义是通用唯一识别码 Universally Unique Identifier 这 是一个软件建构的标准 也是被开源软件基金会 Open Software Foundation OSF 的组织应用在分布式计算环境 D
  • 基于python的socket通信

    准备阶段 需要导入socket库和threading库 如没有请自行安装 本次任务是在python3 9的编译器下运行 版本可自己选择 并不需要相同 关于socket socket 的典型应用就是 Web 服务器和浏览器 浏览器获取用户输入
  • 01 shell脚本中常用命令

    shell 常用命令 数据检索命令 过滤 grep egrep 字符串检索 cut tr 数据处理命令 数据排序 sort 数据去重 uniq 文本数据合并 paste 数据输出 tee 数据处理 xargs 1 grep 负责从数据源中检
  • Python logging 模块

    Python logging 模块 给大家剖析下Python的logging模块 logging模块是Python内置的一个强大易用的日志模块 简单到你只需要两行代码就能输出一些东西来 import logging logging warn
  • 【SDG精读与代码复现】More Control for Free Image Synthesis with Semantic Diffusion Guidance【SDG】

    SDG精读与代码复现 More Control for Free Image Synthesis with Semantic Diffusion Guidance SDG 一 前言 二 论文介绍 1 文章主旨思想背景介绍 2 方法 3 实验
  • [Eagle API]使用python保存所有文件夹层级信息

    api https www yuque com augus gsjgn eagle api pq0y2y var requestOptions method GET redirect follow fetch http localhost
  • 【学习笔记】R数据科学(R for Data Science)—第1章 使用ggplot2进行数据可视化

    1 代码模板 ggplot data
  • IDEA mvn 命令作用介绍

    idea工具maven projects里面有9种生命周期 今天刚好遇到 顺便分享下自己的理解 生命周期是包含在一个项目构建中的一系列有序的阶段 最常用的两种打包方法 一 clean package 如果报错 很可能就是jar依赖的问题 二
  • 我们到底是不是产品经理

    产品究竟是什么 百度百科的解释 产品是一组将输入转化为输出的相互关联或相互作用的活动的结果 其实理解的更直白一点 产品就是用来解决莫个问题的东西 现在我们用的键盘 显示器 水杯 包括买东西时导购员的服务都是产品 也就是说产品这个东西可以是有
  • 从零开始学习React——(七):React列表循环数据以及事件绑定

    本节主要介绍React中列表循环展示数据以及事件的绑定 1 列表循环数据化 目前Child js组件中的 li 标签内的数据是静态的 也就是死的 如果要换成动态的 就需要把这个列表进行数据化之后再用JavaScript代码循环在页面上 首先