2022年前端React的100道面试题的第11题:key属性

问题

列表组件中的 key 理解正常的是?

选项

A key 是在创建元素数组时,需要用到的一个特殊字符串属性。

B 应当给数组内的每个元素都设定 key,使元素具有固定身份标识。

C 需要在整个应用程序甚至单个组件中保持唯一。

D key 帮助 React 识别出被修改、添加的 item,但无法识别删除。

答案

A、B

纠错

C 只需要保证,在同一个数组中的兄弟元素之间的 key 是唯一的。而不需要在整个应用程序甚至单个组件中保持唯一。

D key 帮助 React 识别出被修改、添加或删除的 item。

解答

一个好的经验法则是:在 map() 方法中的元素需要设置 key 属性。

在 JSX 中嵌入 map()

JSX 允许在大括号中嵌入任何表达式,所以我们可以内联 map() 返回的结果。

function NumberList(props) {
  const numbers = props.numbers;
  return (
    <ul>
        {numbers.map((number) =>
            <ListItem key={number.toString()} value={number} />
        )}
    </ul>
  );
}

几种错误的定义方式

一是在item元素内定义key,是没有任何意义的:

function ListItem(props) {
  const value = props.value;
  return (
    // 错误!你不需要在这里指定 key:    
    <li key={value.toString()}>{value}</li>
  );
}

二将 Math.random() 之类的值传递给 key,前后两次渲染之间的 key 要具有“固定身份标识”的特点。可以新增一个 ID 字段到你的模型中,或者利用一部分内容作为哈希值来生成一个 key。

资料

列表 & Key

来源

搜索《考试竞技》微信小程序

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值