React的列表組件必須要有key咏闪?

一曙搬、列表組件沒有key屬性會warning?
1鸽嫂、key提高性能

當創(chuàng)建列表組件時纵装,必須給每一個元素設(shè)置 key 屬性,否則會有警告: a key should be provided for list items据某。如果元素沒有key屬性橡娄,React很難判斷元素應(yīng)該怎么渲染?如果元素有key值癣籽,那么React只對匹配key值的元素挽唉,進行更改等渲染操作,這樣極高提升了運行性能才避。


二橱夭、列表組件使用說明
1、錯誤用法
function ListItem(props) {
    const value = props.value;
    return (
        // 錯誤桑逝!你不需要在這里指定 key:
        <li key={value.toString()}>
            {value}
        </li>
    );
}

function NumberList(props) {
    const numbers = props.numbers;
    const listItems = numbers.map((number) =>
        // 錯誤!元素的 key 應(yīng)該在這里指定:
        <ListItem value={number} />
    );
    return (
        <ul>
            {listItems}
        </ul>
    );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
    <NumberList numbers={numbers} />,
    document.getElementById('root')
);

2俏让、正確用法
function ListItem(props) {
    // 正確楞遏!這里不需要指定 key:
    return <li>{props.value}</li>;
}

function NumberList(props) {
    const numbers = props.numbers;
    const listItems = numbers.map((number) =>
        // 正確!key 應(yīng)該在數(shù)組的上下文中被指定
        <ListItem key={number.toString()} value={number} />
    );
    return (
        <ul>
            {listItems}
        </ul>
    );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
    <NumberList numbers={numbers} />,
    document.getElementById('root')
);

3首昔、key值無法讀取

key 值會傳遞給 React 寡喝,但不會傳遞給組件。如果需要使用 key 值勒奇,請用其他屬性(譬如id):

# Post 組件可以讀出 props.id预鬓,但是不能讀出 props.key
const content = posts.map((post) =>
    <Post
        key={post.id}
        id={post.id}
        title={post.title} />
);

4、唯一性

key 在兄弟節(jié)點間必須唯一赊颠,但全局不需要唯一格二。

function Blog(props) {
    const sidebar = (
        <ul>
            {props.posts.map((post) =>
                <li key={post.id}>
                    {post.title}
                </li>
            )}
        </ul>
    );
    const content = props.posts.map((post) =>
        <div key={post.id}>
            <h3>{post.title}</h3>
            <p>{post.content}</p>
        </div>
    );
    return (
        <div>
            {sidebar}
            <hr />
            {content}
        </div>
    );
}

const posts = [
    { id: 1, title: 'Hello World', content: 'Welcome to learning React!' },
    { id: 2, title: 'Installation', content: 'You can install React from npm.' }
];
ReactDOM.render(
    <Blog posts={posts} />,
    document.getElementById('root')
);

參考文檔
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市顶猜,隨后出現(xiàn)的幾起案子沧奴,更是在濱河造成了極大的恐慌,老刑警劉巖长窄,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滔吠,死亡現(xiàn)場離奇詭異,居然都是意外死亡挠日,警方通過查閱死者的電腦和手機疮绷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚣潜,“玉大人矗愧,你說我怎么就攤上這事≈T” “怎么了唉韭?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犯犁。 經(jīng)常有香客問我属愤,道長,這世上最難降的妖魔是什么酸役? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任住诸,我火速辦了婚禮,結(jié)果婚禮上涣澡,老公的妹妹穿的比我還像新娘贱呐。我一直安慰自己,他們只是感情好入桂,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布奄薇。 她就那樣靜靜地躺著,像睡著了一般抗愁。 火紅的嫁衣襯著肌膚如雪馁蒂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天蜘腌,我揣著相機與錄音沫屡,去河邊找鬼。 笑死撮珠,一個胖子當著我的面吹牛沮脖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼勺届,長吁一口氣:“原來是場噩夢啊……” “哼驶俊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涮因,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎养泡,沒想到半個月后嗜湃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澜掩,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡购披,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肩榕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刚陡。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖株汉,靈堂內(nèi)的尸體忽然破棺而出筐乳,到底是詐尸還是另有隱情,我是刑警寧澤乔妈,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布蝙云,位于F島的核電站,受9級特大地震影響路召,放射性物質(zhì)發(fā)生泄漏勃刨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一股淡、第九天 我趴在偏房一處隱蔽的房頂上張望身隐。 院中可真熱鬧,春花似錦唯灵、人聲如沸贾铝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忌傻。三九已至,卻和暖如春搞监,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镰矿。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工琐驴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓绝淡,卻偏偏與公主長得像宙刘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牢酵,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容