Reactjs入门官方文档(七)【lists-and-keys】

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!) 这两个函数是我在 LeetCode 上做题见到,看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受,于是在C++ 官网去学习,例子就一个是最基础的,我看明白了。虽然是两个函数的接口就两个,但是有时候看别人使用的时候,里面参数还可以放不同的仿函数,我懵逼了。就去网上搜,但是大家讲解的都是它的第一个接口。我只能再把文档一遍一遍过,代码一遍遍的尝试,调试。最终通过查阅资料将其总结如下。 阅读详情

译自reactjs官方文档
我们首先看下在Javascript中如何对一个list进行修改. 下面的例子中我们使用map()方法将一个list中的每个值加倍, 并在最后打印结果:

const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((number) => number * 2);
console.log(doubled);

将会在控制台上打印[2, 4, 6, 8, 10].
在React中将list转换成elments几乎完全一样.

渲染重复对象

你可以构建一个element集, 然后在JSF中使用{}引用它.
下面我们使用map()遍历一个数组, 生成一个<li>集合并赋值给变量listItems:

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
  <li>{number}</li>
);
ReactDOM.render(
  <ul>{listItems}</ul>,
  document.getElementById('root')
);

基本的List对象

通常的做法是将list渲染到一个对象中.
我们将上面的例子重构到一个对象中, 这个对象接受一个数组作为属性, 然后输出一个无序列表.

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li>{number}</li>
  );
  return (
    <ul>{listItems}</ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

这段代码在运行时会抛出一个警告提示应该为生成的list提供一个key. 这个Key是当创建element列表时需要包含的一个特殊的字符串, 稍后将讨论为什么这个key如此重要.
下面代码是修正了这个告警后的样子:

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li key={number.toString()}>
      {number}
    </li>
  );
  return (
    <ul>{listItems}</ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

Keys

Keys帮助React判断哪一条被修改/被添加或被删除. 数组中的每个element应该被赋予一个key作为这个element的唯一标识.
添加key的最好的方式是选择一个能在list中唯一确认一个条目的字符串, 通常可以用数据的id:

const todoItems = todos.map((todo) =>
  <li key={todo.id}>
    {todo.text}
  </li>
);

万不得已的时候(没有data id或其他唯一的字符串)使用数组下标:

const todoItems = todos.map((todo, index) =>
  // Only do this if items have no stable IDs
  <li key={index}>
    {todo.text}
  </li>
);

如果数组中的对象可能要重新排序, 不建议使用下标作为key, 因为这样会很慢. 感兴趣可以阅读深度解释为什么key是必要的

提取出带有key的对象

Key只有在被数组包围的上下文环境中才起作用. 例如在抽象出一个<ListItem />对象后, 你需要将key附加在<ListItem />元素上, 而不是<ListItem />中的<li >元素.

错误示例:
function ListItem(props) {
  const value = props.value;
  return (
    // Wrong! There is no need to specify the key here:
    <li key={value.toString()}>
      {value}
    </li>
  );
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    // Wrong! The key should have been specified here:
    <ListItem value={number} />
  );
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);
正确的示例
function ListItem(props) {
  // Correct! There is no need to specify the key here:
  return <li>{props.value}</li>;
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    // Correct! Key should be specified inside the array.
    <ListItem key={number.toString()}
              value={number} />
  );
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

简而言之, 在map()方法中的元素需要添加Key.

Key只需在同级节点间保持唯一

即不需要保证全局唯一. 如下可以在两个数组中用同一套Key:

function Blog(props) {
  const sidebar = (
    <ul>
      {props.posts.map((post) =>
        <li key={post.id}>
          {post.title}
        </li>
      )}
    </ul>
  );
  const content = props.posts.map((post) =>
    <div key={post.id}>
      <h3>{post.title}</h3>
      <p>{post.content}</p>
    </div>
  );
  return (
    <div>
      {sidebar}
      <hr />
      {content}
    </div>
  );
}

const posts = [
  {id: 1, title: 'Hello World', content: 'Welcome to learning React!'},
  {id: 2, title: 'Installation', content: 'You can install React from npm.'}
];
ReactDOM.render(
  <Blog posts={posts} />,
  document.getElementById('root')
);

Key最为对React的提示而存在, 但它不会被作为属性传递到component内部. 如果你的component需要同一个值, 显式的用一个不同的名字传递:

const content = posts.map((post) =>
  <Post
    key={post.id}
    id={post.id}
    title={post.title} />
);

上面的例子中, Post对象中可以得到props.id, 但拿不到props.key.

在JSX中嵌入map()

JSX允许在{}间嵌入任意表达式:

function NumberList(props) {
  const numbers = props.numbers;
  return (
    <ul>
      {numbers.map((number) =>
        <ListItem key={number.toString()}
                  value={number} />
      )}
    </ul>
  );
}

有时候这会使得代码更清晰, 有时则显得更让人困惑. 为了可读性提取到一个变量是否值得将由你来决定. 如果map()方法中嵌套太复杂, 你该意识到是时候将这些提取到一个component了.

电容放电测试解析 电子设备断电后滤波电容残留电荷存在触电风险,需符合IEC等安全标准对放电时间的要求。放电测试需测量电容电压下降至安全值的时间,设计可采用主动放电电路或被动放电电阻。常见问题包括电阻选择不当或电路设计缺陷,建议预留放电时间裕度并采用组合放电方案。合规的放电设计是确保产品安全性和可靠性的关键环节。 阅读详情

相关推荐

UE5与Cesium for Unreal结合:打造高效离线地图解决方案

本文详细介绍了如何利用UE5与Cesium for Unreal结合打造高效离线地图解决方案,特别适用于数字孪生、军事仿真等网络不稳定场景。通过优化配置、数据处理和性能调优,实现TB级地形数据的流畅渲染,并结合实战案例展示了在油田巡检等复杂环境中的应用效果。

weixin_29007135的博客 493

React.js如何处理list和item部件(父部件和子部件)的关系

我们由UserList和UserItem两个部件 UserItem是一个小的子部件 但是有很多重复 合起来就是UserList父部件。 所以我们应该先写UserItem这个小部件。 import React from 'react'; import './UserItem.css'; const UserItem = props => { return ( <li className="user-item"> <div className="user-it

Tech in Pieces 656

YOLO11改进-模块-引入多尺度差异融合模块MDFM

MDFM主要用于融合双时相图像特征并生成带有丰富上下文信息的差异特征,其过程包含以下步骤:1. 特征提取与差异特征生成首先从双时相图像中提取特征f1和f2,然后将f1和f2进行像素级别的相减,再对相减结果取绝对值,最后通过一个3x3的卷积操作得到Di。2. 多尺度特征融合(MSFF)接着利用多尺度特征学习机制来增强特征融合效果。该机制通过不同核大小的卷积构建多尺度融合过程,具体是通过一个名为 MSFF 单元来实现的。

qq_64693987的博客 4378

reactjs+antd版的todolist实现的四种方式(一)——常用低阶版

前提是假定已经搭建好了react环境,antd的ui框架,首先我们来先看下效果 在vue中实现这个功能想必大家都没问题了,那么在react中如何实现呢? 需要注意的几个地方: 1.react没有自带计算属性的概念,要实现类似在vue的computed功能,需要自己开发 2.react没有vue的动态设置属性的概念,类似于vue的Object,Array的$set是不存在的 3.react没有自带的响应式概念,要实现类似vue的双向绑定需要手动实现 话不多说,上代码 核心组件 import TodoComp

峰会路转的博客 665

深度解析:Android开发工程师(嵌入式系统方向)职位 - 技术需求、面试准备与发展路径

本文深入分析了嵌入式Android开发工程师的岗位要求和技术内涵。该职位需要掌握C/C++、Linux系统编程、硬件接口等核心技术,能够进行Android系统底层定制开发,包括HAL层实现、Framework修改、性能优化等工作。文章详细解读了岗位职责,梳理了必备技术栈,提供了针对性的面试问题与参考答案,并探讨了职业发展路径。这类岗位要求开发者兼具软件工程能力和硬件基础知识,适合在智能电视、机顶盒、车载系统等嵌入式领域发展的技术人员。

郑伟强dev的专栏 132

基于STM32L4XX、HAL库的ESP32-C3-WROOM-02-N4 WIFI模块驱动程序设计

支持802.11 b/g/n Wi-Fi (2.4GHz)RISC-V 32位单核处理器,主频高达160MHz。封装尺寸:18mm × 20mm × 3mm。工作温度范围:-40°C ~ 85°C。// 设置WiFi模式为STA。支持Bluetooth 5 (LE)// 发送AT指令测试通信。// 检查响应是否包含OK。内置4MB SPI Flash。// 连接TCP服务器。// 发送HTTP请求。// 初始化UART。// 建立TCP连接。低功耗设计,适合IoT应用。

zhusl6688的博客 383

react 给数组对象赋值

给react 给数组对象赋值 比如state中数据为 this.state = { MerchantList:[{ storeId:123, storeName:"假数据", storeLocation:"假数据", isItemSelected...

qq_41148886的博客 7421

【002】C++ 语言核心:关键字深度解析与分类指南

auto:自动类型推导bool:布尔类型break:跳出循环或switch语句case:switch语句分支char:字符类型class:定义类const:常量continue:结束当前循环,开始下一次循环default:switch语句默认分支delete:删除对象do:do-while循环double:双精度浮点数类型else:if语句的否定分支enum:枚举类型explicit:显式构造函数export:导出符号extern:声明外部变量或函数。

Lion_Long的博客 1248

React向对象数组进行赋值

赋值

Frank---7的博客 2317

【控制模块算法】控制理论的进修之路

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、(经典)自动控制理论【本科阶段】二、现代控制理论【本科阶段】三、最优控制理论【硕士阶段】总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对对控制理论的理解做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、(经典)自动控制理论【本科阶段】 一般控制工程、自动化相关的考研专业课就是自动

qq_35635374的博客 1447

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

react创建组件的2种方式以及如何赋值

1、使用function构造函数进行创建 function Tem (props){ // 接收传来的值,用props console.log(props) return <h1>这是Tem组件</h1> } const person = { name: 'aa', age: 13, text: '这是人' } ReactDOM.render(<div> 123 {/* 为组件传值 */} <Tem name={pers.

weixin_43090018的博客 3542

AUTOSAR NvM 实车故障深度剖析:车载存储问题快速定位与工程解决方案

软件配置与代码逻辑无问题时,排查底层驱动与ECU硬件,步骤如下:底层驱动排查:排查Fls/Eep驱动配置,是否适配目标MCU(如TC397、S32K),编程/擦除/读取时序是否合理;检查Fls/Eep驱动错误处理逻辑,是否未处理Flash编程失败、读取错误等异常;验证Flash高速编程模式是否启用,是否能提升写入/读取速度;排查MemIf层配置,是否正确对接NvM与Fls/Eep驱动,是否存在调度延迟。

getusushu的博客 78

React官方文档--Lists and Keys

Lists and Keys下面是JavaScript使用map()历一个数组,在React中可以使用元素列表来实现相同操作。//javascript take an array and double them const numbers = [1,2,3,4,5]; const doubled = numbers.map((number) => number * 2); console.log(d

cithegod的博客 2338

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

React Lists and Keys

Demo#1 * NumberList.js import React from 'react' class NumberList extends React.Component { numbers; render() { const numbers = this.props.numbers; const listItems = numbe...

fareast_mzh的博客 392

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

React学习:列表(Lists) 和 键(Keys)

首先,回顾一下在 JavaScript 中如何转换列表。 给定下面代码,我们使用 map() 函数使 numbers 数组中的元素值翻倍 const numbers = [1, 2, 3, 4, 5]; const doubled = numbers.map((number) =&gt; number * 2); console.log(doubled); 输出: [2, 4, 6, 8...

若水弹丸之地 3090

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

08 Lists and Keys

Array.map()函数 const numbers = [1, 2, 3, 4, 5] const doubled = numbers.map(number => number *2) 同样地,通过数组的map函数将数组转换成React元素列表 1. 组件中渲染列表 function NumberList(props) { const numbers = props.numbers const items = numbers.map(number => { <li

nan's notes 150

Lists and keys

function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) => <li key={number.toString()}> {number} </li> ); ...

djp0910的博客 112

React中文文档之Lists and Keys

Lists and Keys 首先,让我们回顾一下,在js中如何变换列表。 下面给出的代码,我们使用 'map()' 函数作用一个 'numbers' 数组,并且使数组中的元素值*2.我们分配由 'map()' 返回的新数组给变量 'doubled',并且在console中输出: const numbers = [1, 2, 3, 4, 5]; const doubled = num

beyond__devil的博客 687

【React系列】列表(Lists)和键(Keys)

本篇我们来认识一下react中的列表(Lists)和键(Keys)。首先让我们回顾一下在 JavaScript 中如何转换列表。 我们知道,在JavaScript中map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map() 方法按照原始数组元素顺序依次处理元素。如: /*返回一个数组,数组中元素为原始数组的平方根*/ var numbers = [4, 9, 16,...

冷星的专栏 322

React (5) -- Lists and Keys

原文地址:https://facebook.github.io/react/docs/lists-and-keys.html 一、Lists 1. 渲染多个组件 (Rendering Multiple Components) 构建元素集合,并使用花括号{}将它们包含在JSX中。 //Warning: Each child in an array or iterator should have a ...

weixin_30496431的博客 118

react回车键_React列表和键101

react回车键Often when reading articles or going through React tutorials, you’re going to see a lot of examples where developers use the index of an element as the key for list rendering.通常,在阅读文章或阅读React教...

weixin_26724171的博客 447

27-React Lists and Keys

Lists and Keys React支持以数组的形式来渲染多个组件,它会将你数组中的每个组件以列表的形式渲染开来。 当你使用数组的方式来渲染你的组件时,你需要给每个组件一个Key值,否则会出现一个警告,提示指出应该为列表的每一项提供一个属性key,如下代码所示: function NumberList(props) { const numbers = props.numbers; ...

weixin_30788731的博客 93

Build Your Own React - Part 4: Lists and Keys

The last and final feature we'll add to Minimum Viable React are keys. By keys, I refer to the key attribute that you should assign to components or simple elements when rendering lists. Why are keys...

weixin_40222803的博客 375

React从入门到精通系列之(8)Lists和Keys的处理

八、Lists和Keys的处理 首先,让我们回顾一下如何在JavaScript中遍历lists。 下面的代码,我们使用map()函数获取一个数字数组,并将它们的值加倍。 我们将map()返回的新数组赋给变量doubled并记录下来: const numbers = [1, 2, 3, 4, 5]; const doubled = numb...

weixin_34250709的博客 191

八、Lists和Keys的处理

八、Lists和Keys的处理 首先,让我们回顾一下如何在JavaScript中遍历lists。 下面的代码,我们使用map()函数获取一个数字数组,并将它们的值加倍。 我们将map()返回的新数组赋给变量doubled并记录下来: const numbers = [1, 2, 3, 4, 5]; const doubled = numbers.map(item => item

super苹果核的博客 472
上一篇: Reactjs入门官方文档(六)【conditional-rendering】
下一篇: Reactjs入门官方文档(八)【forms】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值