成人免费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

云原生反模式

2014-12-15 10:25:21

移動開發像素設計

2010-08-12 14:13:01

Flex開發者
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩免费视频一区二区 | 欧美日韩午夜精品 | 特级a欧美做爰片毛片 | 久久五月婷 | 亚洲精品欧美一区二区三区 | 91精品久久久 | 你懂的免费在线 | 一级黄色片日本 | 欧美 日韩 中文 | 亚洲综合色视频在线观看 | 国产精品永久在线观看 | 亚洲精品一区二区 | 美女视频黄色的 | 国产伦精品一区二区三区高清 | 国产精品欧美一区喷水 | www.中文字幕.com | 色男人的天堂 | 狠狠色狠狠色综合日日92 | 欧美一级二级视频 | 国产精品美女久久久 | 神马影院一区二区三区 | 国产精品久久久久一区二区三区 | 亚洲免费大片 | 一区二区三区四区国产精品 | 亚洲国产成人av好男人在线观看 | 精品一区二区三区在线视频 | 欧美日在线 | 免费观看一级毛片 | 欧美成人a| 国产日韩欧美激情 | 欧美在线综合 | 毛片一区| 亚洲高清视频一区 | 国产成人精品久久二区二区91 | 日韩国产在线 | 欧美电影一区 | 日本午夜精品一区二区三区 | 国产免费a视频 | 老司机成人在线 | 男女网站免费观看 | 一级片免费观看 |