当前位置: 首页 > news >正文

深圳建网站的公西安seo搜推宝

深圳建网站的公,西安seo搜推宝,网站建设开源节流,飘雪影视在线观看免费观看西瓜React使用Diff算法来比较虚拟DOM树和真实DOM树之间的差异#xff0c;并仅更新必要的部分#xff0c;以提高性能。key的作用是在Diff算法中帮助React确定哪些节点已更改#xff0c;哪些节点已添加或删除。 我们以案例来说明。 使用索引值和唯一ID作为key的效果 1、使用索引…React使用Diff算法来比较虚拟DOM树和真实DOM树之间的差异并仅更新必要的部分以提高性能。key的作用是在Diff算法中帮助React确定哪些节点已更改哪些节点已添加或删除。 我们以案例来说明。 使用索引值和唯一ID作为key的效果 1、使用索引值作为key class Person extends React.Component {state {persons: [{id:1,name:张三,age: 20},{id:2,name:李四,age: 21},]}// 增加人员addPerson () {let {persons} this.stateconst user {id:persons.length 1,name:王麻子,age:22}persons [user,...persons]this.setState({persons})}render(){const {persons} this.statereturn (divh1验证diff算法/h1button onClick{this.addPerson}增加人员/button{persons.map((val,idx) {const info 姓名val.name 年龄 val.ageconsole.log(idx,info)return (div key{idx}{info}/div)})}/div)}}// 2、将虚拟DOM渲染到页面标签必须闭合ReactDOM.render(Person/, document.getElementById(app))以上代码我们使用的是索引值idx来作为标签的key值渲染到页面当我点击【增加人员】的按钮时会在persons的状态值里面最前方插入一个新的人员信息然后react在render到页面中去。其页面效果如下 2、使用id作为key值 class Person extends React.Component {state {persons: [{id:1,name:张三,age: 20},{id:2,name:李四,age: 21},]}// 增加人员addPerson () {let {persons} this.stateconst user {id:persons.length 1,name:王麻子,age:22}persons [user,...persons]this.setState({persons})}render(){const {persons} this.statereturn (divh1验证diff算法/h1button onClick{this.addPerson}增加人员/button{persons.map((val,idx) {const info 姓名val.name 年龄 val.ageconsole.log(idx,info)return (div key{val.id}{info}/div)})}/div)}}// 2、将虚拟DOM渲染到页面标签必须闭合ReactDOM.render(Person/, document.getElementById(app))以上代码我们使用id来作为标签的key值但是这里的效果和我们看到的是一样的但是在react中处理的方式是不一样的后续我们继续讨论。 使用索引值和唯一ID作为key的区别 我们对以上案例做一下修改我们增加一个输入框在看看其效果。 1、使用索引值作为key class Person extends React.Component {state {persons: [{id:1,name:张三,age: 20},{id:2,name:李四,age: 21},]}// 增加人员addPerson () {let {persons} this.stateconst user {id:persons.length 1,name:王麻子,age:22}persons [user,...persons]this.setState({persons})}render(){const {persons} this.statereturn (divh1验证diff算法/h1button onClick{this.addPerson}增加人员/button{persons.map((val,idx) {const info 姓名val.name 年龄 val.ageconsole.log(idx,info)return (div key{idx}{info} input defaultValue{info} typetext//div)})}/div)}}// 2、将虚拟DOM渲染到页面标签必须闭合ReactDOM.render(Person/, document.getElementById(app))直接看效果 姓名王麻子年龄22 ----输入框姓名张三年龄20 姓名张三年龄20 ----输入框姓名李四年龄21 姓名李四年龄21 ----输入框姓名李四年龄21在以上效果图上我们发现了严重的错误输入框的内容与其人员信息不一致这是为什么呢 2、使用ID作为key class Person extends React.Component {state {persons: [{id:1,name:张三,age: 20},{id:2,name:李四,age: 21},]}// 增加人员addPerson () {let {persons} this.stateconst user {id:persons.length 1,name:王麻子,age:22}persons [user,...persons]this.setState({persons})}render(){const {persons} this.statereturn (divh1验证diff算法/h1button onClick{this.addPerson}增加人员/button{persons.map((val,idx) {const info 姓名val.name 年龄 val.ageconsole.log(idx,info)return (div key{val.id}{info} input defaultValue{info} typetext//div)})}/div)}}// 2、将虚拟DOM渲染到页面标签必须闭合ReactDOM.render(Person/, document.getElementById(app))直接看效果 姓名王麻子年龄22 ----输入框姓名王麻子年龄22 姓名张三年龄20 ----输入框姓名张三年龄20 姓名李四年龄21 ----输入框姓名李四年龄21在以上效果图上我们发现了人员信息与输入框的信息一致并没有发生什么错误这是为什么呢 分析索引值与ID值作为key的原理 分析key值是索引值时的流程 根据上图我们可以知道使用索引值作为key的时候三条数据基本上都要生成新的DOM而输入框的值因为与旧的虚拟DOM比较内容一致导致与新的数据不一致的结果。 分析key值是ID值的流程 根据上图我们可以知道使用唯一ID作为key值时比较第一条数据时key值就不存在需要生成新的虚拟DOM而后面两条的key值与旧的虚拟DOM一致可以复用旧的真实DOM且不需要生成新的DOM减少成本这样使得性能更好。 小总结 结果案例演示我们知道为什么遍历列表时key最好不要用index而是使用唯一标识以此来减少成本提高性能。 虚拟DOM中key的作用 1、简单的说: key是虚拟DOM对象的标识, 在更新显示时key起着极其重要的作用。 2、详细的说: 当状态中的数据发生变化时react会根据【新数据】生成【新的虚拟DOM】, 随后React进行【新虚拟DOM】与【旧虚拟DOM】的diff比较比较规则如下 ​   a. 旧虚拟DOM中找到了与新虚拟DOM相同的key ​        (1).若虚拟DOM中内容没变, 直接使用之前的真实DOM ​         (2).若虚拟DOM中内容变了, 则生成新的真实DOM随后替换掉页面中之前的真实DOM ​     b. 旧虚拟DOM中未找到与新虚拟DOM相同的key根据数据创建新的真实DOM随后渲染到到页面 用index作为key可能会引发的问题 1、若对数据进行逆序添加、逆序删除等破坏顺序操作:     会产生没有必要的真实DOM更新 界面效果没问题, 但效率低。 2、如果结构中还包含输入类的DOM     会产生错误DOM更新 界面有问题。 3、注意如果不存在对数据的逆序添加、逆序删除等破坏顺序操作仅用于渲染列表用于展示使用index作为key是没有问题的。 开发中如何选择key? 1、最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。 2、如果确定只是简单的展示数据用index也是可以的。
http://www.w-s-a.com/news/176839/

相关文章:

  • 哔哩哔哩网站建设分析有哪些做网站好的公司
  • 福建建设执业中心网站沧州网络推广外包公司
  • 做网站怎么改关键词营销网站建设818gx
  • 广撒网网站怎么进行网络营销
  • 中职计算机网站建设教学计划电商网站如何避免客户信息泄露
  • 惠州微网站建设外贸进出口代理公司
  • 网站建设最常见的问题建设银行网站机构
  • 网站集群建设相关的招标南通seo网站建设费用
  • 网络培训的网站建设能够做二维码网站
  • 网站类游戏网站开发wordpress 文章首标点
  • 徐州网站建设熊掌号免费推广网站入口2020
  • 网站建设有前途长春高铁站
  • 做网站网课阿里云域名查询系统
  • saas建站平台有哪些简述网站建设基本流程答案
  • 个人怎么做网站网站浏览思路
  • 网站建设里的知识长沙网络营销公司
  • 网站建设与维护大作业pc网站转换成微网站
  • php网站开发经典教材东莞网站开发
  • 教育培训手机网站模板下载跨境电商培训哪家最好
  • 网站开发淄博网站被降权会发生什么影响吗
  • 网站开发常用的语言东城手机网站制作
  • 微小店网站建设平台手机优化加速有什么用
  • 沈阳酒店企业网站制作公司竞价网站怎么做seo
  • 中山企业网站多少钱学网站建设的好处
  • 做官网网站哪家公司好jianux wordpress
  • 插件素材网站新站seo优化快速上排名
  • 网站注销主体填写原因asp响应式h5网站源码下载
  • 电商类网站模板下载济南市建设网官网
  • 万户网络做网站如何采集器wordpress
  • 襄阳网站建设企业查看 wordpress 插件