1+ import React , { useState } from "react" ;
2+
3+ export default function ListKey ( ) {
4+ // 错误示范:使用 index 作为 key
5+ const [ badList , setBadList ] = useState ( [
6+ { name : "项目 A" } ,
7+ { name : "项目 B" } ,
8+ { name : "项目 C" } ,
9+ ] ) ;
10+ const [ badCounter , setBadCounter ] = useState ( 4 ) ;
11+
12+ // 正确做法:使用唯一 id 作为 key
13+ const [ goodList , setGoodList ] = useState ( [
14+ { id : 1 , name : "项目 A" } ,
15+ { id : 2 , name : "项目 B" } ,
16+ { id : 3 , name : "项目 C" } ,
17+ ] ) ;
18+ const [ goodCounter , setGoodCounter ] = useState ( 4 ) ;
19+
20+ // 错误示范的方法
21+ const removeBadItem = ( index ) => {
22+ setBadList ( ( prev ) => prev . filter ( ( _ , i ) => i !== index ) ) ;
23+ } ;
24+
25+ const addBadItem = ( ) => {
26+ setBadList ( ( prev ) => [
27+ ...prev ,
28+ { name : `项目 ${ String . fromCharCode ( 64 + badCounter ) } ` } ,
29+ ] ) ;
30+ setBadCounter ( ( prev ) => prev + 1 ) ;
31+ } ;
32+
33+ // 正确做法的方法
34+ const removeGoodItem = ( id ) => {
35+ setGoodList ( ( prev ) => prev . filter ( ( item ) => item . id !== id ) ) ;
36+ } ;
37+
38+ const addGoodItem = ( ) => {
39+ setGoodList ( ( prev ) => [
40+ ...prev ,
41+ {
42+ id : goodCounter ,
43+ name : `项目 ${ String . fromCharCode ( 64 + goodCounter ) } ` ,
44+ } ,
45+ ] ) ;
46+ setGoodCounter ( ( prev ) => prev + 1 ) ;
47+ } ;
48+
49+ return (
50+ < div >
51+ < h2 > 错误示范:使用 index 作为 key</ h2 >
52+ < div >
53+ < ul >
54+ { badList . map ( ( item , index ) => (
55+ < li key = { index } >
56+ < span > { item . name } </ span >
57+ < input type = "text" placeholder = { `输入${ item . name } 的值` } />
58+ < button onClick = { ( ) => removeBadItem ( index ) } > 删除</ button >
59+ </ li >
60+ ) ) }
61+ </ ul >
62+ < button onClick = { addBadItem } > 添加项</ button >
63+ </ div >
64+
65+ < h2 > 正确做法:使用唯一 id 作为 key</ h2 >
66+ < div >
67+ < ul >
68+ { goodList . map ( ( item ) => (
69+ < li key = { item . id } >
70+ < span > { item . name } </ span >
71+ < input type = "text" placeholder = { `输入${ item . name } 的值` } />
72+ < button onClick = { ( ) => removeGoodItem ( item . id ) } > 删除</ button >
73+ </ li >
74+ ) ) }
75+ </ ul >
76+ < button onClick = { addGoodItem } > 添加项</ button >
77+ </ div >
78+ </ div >
79+ ) ;
80+ }
0 commit comments