成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發者要了解index作為key是反模式

開發 開發工具
我曾多次看到開發者在渲染列表的時候把列表項的index作為它的key。看起來很優雅,但這樣做存在潛在的危險,請看文章詳細介紹。

 我曾多次看到開發者在渲染列表的時候把列表項的index作為它的key。 

  1. {todos.map((todo, index) => 
  2.   <Todo {...todo} 
  3.     key={index} /> 
  4. )} 

 這看起來很優雅,而且能夠解決警告(這才是“真”問題,對吧?)的問題,這樣做有什么危險呢?

It may break your application and display wrong data!

讓我來解釋,key是React唯一用來確定DOM元素的東西,如果你想列表增加一項或移除中間的某項,會發生什么事?如果key和之前一個一樣React就會假定這個DOM元素和之前對應的組件是一個,但是它們可能并不是同一個了。

為了證明潛在的危險我創建了一個簡單示例

 這表明,如果不指定key的時候React會使用index,因為這是那個時候最好的猜測,而且它會警告你說這不是最優解(它通過令人困惑的語句表述這個意思)。如果你主動提供了它,React就認為你知道你在干什么。記住這個示例,它能產生不可預測的結果。

比較好

像這樣的應該都有一個永久的唯一的屬性,當列表項創建的時候它是最合適被設置為key的,顯然我是在說id,我們可以用下面的方式使用它: 

  1. {todos.map((todo) => 
  2.   <Todo {...todo} 
  3.     key={todo.id} /> 
  4. )} 

 另外的實現方式是把編號遞增移動到抽象方法中,使用一個全局的index來確保任何兩個列表項的id不同。 

  1. todoCounter = 1; 
  2. function createNewTodo(text) { 
  3.   return { 
  4.     completed: false
  5.     id: todoCounter++, 
  6.     text 
  7.   } 

 更好

一個產品級別的方案應該是一個更健壯的方法,能夠處理分散創建列表項。因此,我推薦使用shortid。它能夠快速生成“短 無序 url友好 唯一”的id,代碼像下面這樣: 

  1. var shortid = require('shortid'); 
  2. function createNewTodo(text) { 
  3.   return { 
  4.     completed: false
  5.     id: shortid.generate(), 
  6.     text 
  7.   } 

 TL;DR:為每個列表項生成一個唯一的id,并在渲染列表的時候使用它作為key。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2018-06-15 08:43:33

Java堆外內存

2016-12-19 15:55:10

PHP開發者Composer

2017-02-06 09:22:19

PHP開發Composer

2016-12-26 17:53:05

Java開發者編程語言

2017-02-05 16:00:35

Java編程語言

2017-01-15 17:48:04

Java開發者編程語言

2020-04-03 09:00:00

微服務前端架構

2015-08-11 08:41:58

游戲數據游戲開發

2013-04-19 09:23:34

2013開發者開發趨勢和技能

2021-05-10 10:01:04

JavaScript開發技巧

2011-09-20 09:27:50

Web

2020-03-04 11:20:22

DSL開發領域特定語言

2012-02-06 09:14:24

2013-07-10 11:11:05

PythonGo語言

2017-06-26 15:32:59

前端編譯原理語言知識

2016-03-25 09:29:24

Apple開發工具開發者

2011-08-01 16:39:21

Xcode 目錄結構

2023-09-13 11:58:17

云原生反模式

2010-08-12 14:13:01

Flex開發者

2014-12-15 10:25:21

移動開發像素設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜手机在线视频 | 欧美日韩久久久 | 中文字幕在线剧情 | 久久精品国产一区二区 | 亚洲视频免费在线 | 日本高清aⅴ毛片免费 | 国产精品美女一区二区三区 | 国产精品久久久久久av公交车 | 国产1区在线 | 亚洲黄色在线免费观看 | 日韩成人 | 欧美日韩亚洲一区 | 日本免费视频 | 日韩视频在线一区二区 | 91精品久久久久久久久中文字幕 | 男人天堂国产 | 久久精品一区二区三区四区 | 日韩精品一区二区三区 | 欧美日韩成人网 | 国产精品一区二区视频 | 亚洲第一成年免费网站 | 亚洲成人一区二区三区 | 日韩av一区二区在线观看 | 国产真实精品久久二三区 | 日韩视频高清 | 午夜视频一区二区三区 | 在线看av网址 | 青春草国产 | 午夜免费福利影院 | 亚洲成人一级 | 国产精品免费一区二区三区四区 | 亚洲福利在线观看 | 日韩在线中文字幕 | 91免费电影 | 久久久国 | 国产三级大片 | 欧美日韩高清一区 | 久久久久亚洲精品 | 九色 在线| 国产三区四区 | 一级毛片在线播放 |