日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

我們一起聊聊React列表渲染與Key

來源: 責編: 時間:2024-02-01 12:52:22 269觀看
導讀在React中,列表渲染是一種常見的模式,它允許我們基于數組的內容動態生成React元素。同時,為了提高React的性能并確保正確的元素更新,我們需要為動態生成的元素添加唯一的 key 屬性。列表渲染列表渲染通常使用map函數,它會

在React中,列表渲染是一種常見的模式,它允許我們基于數組的內容動態生成React元素。同時,為了提高React的性能并確保正確的元素更新,我們需要為動態生成的元素添加唯一的 key 屬性。umI28資訊網——每日最新資訊28at.com

列表渲染

列表渲染通常使用map函數,它會遍歷數組中的每個元素,并返回一個新的React元素數組。JSX 允許在大括號中嵌入任何表達式,所以我們可以內聯 map() 返回的結果:umI28資訊網——每日最新資訊28at.com

import React from 'react';function ListRendering() {  const items = ['Item 1', 'Item 2', 'Item 3'];  const itemList = items.map((item, index) => (    <li key={index}>{item}</li>  ));  return <ul>{itemList}</ul>;}export default ListRendering;

在上述例子中,items 是一個包含字符串的數組。通過map函數,我們遍歷數組并為每個元素創建一個<li>元素。注意,每個<li>元素都有一個唯一的key屬性,通常使用元素的索引作為key。這有助于React在更新時更準確地識別每個元素。umI28資訊網——每日最新資訊28at.com

添加 key 屬性的原因

  1. React的更新算法: React使用key屬性來優化元素更新的過程。通過使用key,React能夠更有效地確定哪些元素被添加、刪除或修改,從而避免不必要的重新渲染。
  2. 幫助React識別元素: 每個React元素都應該有一個唯一的key,以便React能夠區分它們。這對于處理動態列表、排序或篩選等操作非常重要。

使用元素屬性作為 key 的注意事項

你可能會想直接把數組項的索引當作 key 值來用,實際上,如果你沒有顯式地指定 key 值,React 確實默認會這么做。但是數組項的順序在插入、刪除或者重新排序等操作中會發生改變,此時把索引順序用作 key 值會產生一些微妙且令人困惑的 bug。umI28資訊網——每日最新資訊28at.com

與之類似,請不要在運行過程中動態地產生 key,像是 key={Math.random()} 這種方式。這會導致每次重新渲染后的 key 值都不一樣,從而使得所有的組件和 DOM 元素每次都要重新創建。這不僅會造成運行變慢的問題,更有可能導致用戶輸入的丟失。所以,使用能從給定數據中穩定取得的值才是明智的選擇。umI28資訊網——每日最新資訊28at.com

有一點需要注意,組件不會把 key 當作 props 的一部分。Key 的存在只對 React 本身起到提示作用。umI28資訊網——每日最新資訊28at.com

所以在使用元素屬性作為key時,需要確保該屬性在列表中是唯一且穩定的。不推薦使用索引作為唯一的key,因為它可能導致一些問題,尤其是在動態操作數組時。umI28資訊網——每日最新資訊28at.com

// 不推薦const itemList = items.map((item, index) => (  <li key={index}>{item}</li>));

最好的做法是使用每個元素的唯一標識符作為key,例如元素在數據中的ID。umI28資訊網——每日最新資訊28at.com

const itemsWithId = [  { id: 1, text: 'Item 1' },  { id: 2, text: 'Item 2' },  { id: 3, text: 'Item 3' },];const itemList = itemsWithId.map((item) => (  <li key={item.id}>{item.text}</li>));

沒有穩定的 ID 的情況

如果數據中沒有唯一且穩定的ID,你可以使用一些哈希函數或庫來生成一個穩定的ID,確保在數據變化時仍然能夠提供唯一的key。umI28資訊網——每日最新資訊28at.com

import { v4 as uuidv4 } from 'uuid';const items = ['Item 1', 'Item 2', 'Item 3'];const itemList = items.map((item) => (  <li key={uuidv4()}>{item}</li>));

在這個例子中,我們使用了uuid庫來生成一個唯一的ID作為key。umI28資訊網——每日最新資訊28at.com

總之,列表渲染是React中常見的模式,使用key屬性可以確保React在處理動態列表時更加高效和準確。umI28資訊網——每日最新資訊28at.com

馬上一練

數組生成菜譜列表,其中每個菜譜,都用umI28資訊網——每日最新資訊28at.com

來顯示它的名稱,并在里列出它所需的原料。export const recipes = [  {    id: 'greek-salad',    name: '希臘沙拉',    ingredients: ['西紅柿', '黃瓜', '洋蔥', '油橄欖', '羊奶酪'],  },  {    id: 'hawaiian-pizza',    name: '夏威夷披薩',    ingredients: ['披薩餅皮', '披薩醬', '馬蘇里拉奶酪', '火腿', '菠蘿'],  },  {    id: 'hummus',    name: '鷹嘴豆泥',    ingredients: ['鷹嘴豆', '橄欖油', '蒜瓣', '檸檬', '芝麻醬'],  },];export default function RecipeList() {  return (    <div>      <h1>菜譜</h1>      {recipes.map(recipe =>        <div key={recipe.id}>          <h2>{recipe.name}</h2>          <ul>            {recipe.ingredients.map(ingredient =>              <li key={ingredient}>                {ingredient}              </li>            )}          </ul>        </div>      )}    </div>  );}

umI28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-70484-0.html我們一起聊聊React列表渲染與Key

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 故障現場 | 這個死鎖出奇的詭異

下一篇: CSS問題:推薦幾個超好看漸變色!項目中可用

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 弋阳县| 祁东县| 阿城市| 霍林郭勒市| 军事| 长乐市| 宜都市| 阳新县| 濮阳市| 文成县| 西藏| 青阳县| 迭部县| 怀安县| 子长县| 阳城县| 普定县| 比如县| 鸡泽县| 新平| 丹江口市| 武胜县| 龙江县| 西峡县| 昌乐县| 莱阳市| 获嘉县| 武义县| 克什克腾旗| 临安市| 固安县| 宁强县| 玉环县| 扎赉特旗| 海兴县| 宜阳县| 麦盖提县| 江安县| 竹北市| 诸城市| 桃江县|