Lists and Keys

React支持以数组的形式来渲染多个组件,它会将你数组中的每个组件以列表的形式渲染开来。

当你使用数组的方式来渲染你的组件时,你需要给每个组件一个Key值,否则会出现一个警告,提示指出应该为列表的每一项提供一个属性key,如下代码所示:

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

分配key后的代码如下:

function NumberList(props) {const numbers = props.numbers;const listItems = numbers.map(item => <li key={item.toString()}>{item}</li>);return (<ul>{listItems}</ul>)
}const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(<NumberList numbers={numbers} />,document.getElementById('root')
)

Keys值帮助React确定哪些组件已经改变了,增加了或者被移除了。

const numbers =[1, 2, 3, 4, 5];
const listItems = numbers.map(item => <li key={item.toString()}>{item}</li>
);

数组中的每个组件都需要有一个确定的keys值,即一个确定的身份。

keys值最好是用字符串来做唯一标识符。我们通常用数据的ID来做主键。

Keys只用在有数组的上下文才有意义。

示例:key的错误用法

function ListItem(props) {const value = props.value;return (<li key={value.toString()}>{value}</li>);
}function NumberList(props) {const numbers = props.numbers;const listItems = numbers.map(item =>// 这是错误的,这里应该设置上key<ListItem value={item} />);return (<ul>{listItems}</ul>);
}const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(<NumberList numbers={numbers}> />,document.getElementById('root')
)

示例:key的正确用法

function ListItem(props) {// 这才是正确的,在这里不需要设置keyreturn <li>{props.value}</li>;
}function NumberList(props) {const numbers = props.numbers;const listItems = numbers.map(item => // 这才是正确的,在这里设置key<ListItem key={item.toString()} value={item} />);return (<ul>{listItems}</ul>);
}const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(<NumberList numbers={numbers} />,document.getElementById('root')
)

不同数组中可以用相同的key,但兄弟姐妹之间的键必须是唯一的。

Forms

表单组件不同于其他组件,因为他们可以通过用户交互发生变化。这些组件提供的界面使响应用户交互的表单数据处理更加容易。

交互属性

表单组件支持几个受用户交互影响的属性:

  • value:用于 、、 组件
  • checked:用于类型为 checkbox 或者 radio 的  组件
  • selected:用于  组件

注:在React中应当使用中的value值来代替中的selected属性。(虽然你也可以使用selected,但这样做的话你就需要将整个组件都重新渲染一遍)

在 HTML 中, 的值通过子节点设置;在 React 中则应该使用 value 代替。

表单组件可以通过 onChange 回调函数来监听组件变化。当用户做出以下交互时,onChange 执行并通过浏览器做出响应:

  • 或  的 value 发生变化时。
  • 的 checked 状态改变时。
  • 的 selected 状态改变时。

    受限组件

    对于设置了value值(或value值为null)的组件,称作受限组件。

受限组件如 , , 和 ,它们渲染出来的 HTML 元素始终保持 value 属性的值,用户在渲染出来的元素里输入任何值都不起作用,如果想响应更新用户输入的值,就得使用 onChange 事件。

  render: function() {return <input type="text" value="Hello!" />;}

这段代码将渲染为一个值总是为“Hello!”的输入框。任何用户输入都不会对该渲染后的元素其作用,因为React已将其值声明为“Hello!”。如果你想响应用户输入来更新该组件的值,你可以使用onChange事件:

getInitialState: function() {return {value: 'Hello!'};},handleChange: function(event) {this.setState({value: event.target.value});},render: function() {var value = this.state.value;return <input type="text" value={value} onChange={this.handleChange} />;}

转载于:https://www.cnblogs.com/fengxuefei/p/6250618.html

27-React Lists and Keys相关推荐

  1. [react] 需要把keys设置为全局唯一吗?

    [react] 需要把keys设置为全局唯一吗? 不需要,key是用来进行diff算法的时候进行同层比较,准备的说key只需要在兄弟节点之间唯一,一般情况key选取是后端定义的id.万不得已的时候可以 ...

  2. React.js 学习

    目录 Source Expression and statement: React styling: React Components React props Mapping data to comp ...

  3. web前端知识点总结html,css,js,vue,react/面试题会经常问到

    一阶段 1.网络中使用最多的图片格式有哪些 gif 支持动画,只有全透明和不透明两种模式,只有256种颜色 jpg 采用有损压缩算法,体积较小,不支持透明,不支持动画 png 采用有损压缩算法,体积也 ...

  4. 面试官系统精讲Java源码及大厂真题 - 14 简化工作:Guava Lists Maps 实际工作运用和源码

    简化工作:Guava Lists Maps 实际工作运用和源码 更新时间:2019-09-24 10:32:00 如果不想在世界上虚度一生,那就要学习一辈子. 引导语 在日常工作中,我们经常会使用一些 ...

  5. Node.js + React + MongoDB 实现 TodoList 单页应用

    之前用 Ant Design 开发了一个项目,因此对 React 的特性有了一定的了解,React 使用封装组件的思想,组件各自维护自己的状态和 UI, 组件之间通过 props 传递数据和方法.当状 ...

  6. java react_2019JAVA最新课程-React从入门到实战(新)

    React是一个库,通过react类,可以自定义组件.里边支持jsx语法,通过props和state传参/维护状态. 其他插件,比如Router/Redux都是围绕着扩展/修改react对象里的属性来 ...

  7. 前端面试 React篇(上)

    一.组件基础 1. React 事件机制 <div onClick={this.handleClick.bind(this)}>点我</div> React并不是将click事 ...

  8. React Native专题

    未经授权不得转载: 出处地址:http://www.lcode.org 本文出自:[江清清的技术专栏] 本React Native讲解专题:主要讲解了React Native开发,由基础环境搭建配置入 ...

  9. React Native专题-江清清

    本React Native讲解专题:主要讲解了React Native开发,由基础环境搭建配置入门,基础,进阶相关讲解. 刚创建的React Native交流8群:533435865  欢迎各位大牛, ...

最新文章

  1. 腾讯AI击败王者荣耀职业队,全靠自学、策略清奇,一天训练量为人类440年
  2. mysql预处理 更新_MySQL 预处理方法更新删除-2018年04月27日00时59分
  3. java aes key iv_java – AES / CBC真的需要IV参数吗?
  4. 文件包含——概念(一)
  5. java 推送消息页面_Notification API,为你的网页添加桌面通知推送
  6. 无线技术之WLAN八个常见问题解答(收藏)
  7. python until语句_详解Lua中repeat...until循环语句的使用方法
  8. Yii2 的快速配置 api 服务 yii2-fast-api
  9. numpy数组按某一维度相加_Python数据分析之NumPy(高级篇)
  10. C# 串口接收1次数据会进入2次串口接收事件serialPort1_DataReceived,第2次进入时串口缓冲区为空
  11. 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
  12. 不懂 ZooKeeper?没关系,这一篇给你讲的明明白白
  13. 插入排序:直接插入排序希尔排序
  14. WebDriverException: Cannot find firefox binary in PATH.的解决方法
  15. java int数组任何数之间间隔不能对于指定数,内付极速排序
  16. azure云数据库_Azure SQL数据库的性能调优
  17. MySQL 索引分析
  18. C#番外篇-SpinWait
  19. APP兼容性覆盖测试
  20. shell获取主机信息并根据定时任务发送邮件到手机

热门文章

  1. ResNeX论文概述
  2. 基于深度卷积神经网络的玉米病害识别
  3. python语言接收信息的内置函数_python接收信息的内置函数是
  4. 基于seq2seq模型的chatbot对话系统的tensorflow实现
  5. 图像风格转换 - keras简化版实现
  6. 计算机生成兵力方法,计算机生成兵力平台体系结构技术研究
  7. 主成分分析、因子分析和聚类分析的区别
  8. Ubuntu 配置Samba 服务器
  9. ObjC学习3-类、继承、重载
  10. linux中zip文件编码错误,如何避免在 Linux 下解压 zip 文件时可能出现的乱码情况...