react里的key,加不加key,到底有啥不一样?图例+代码说明

大家好,我是梅巴哥er ,本篇介绍的是react里的key

key的作用:

  • 提高状态的更新效率,减少不必要的DOM操作
  • 方便识别出是哪些状态在变化。

key的位置:

  • 放在map生成的第一li或div标签里

key的值:

  • 一般是元素的id值

下面以图例+代码的形式,来直观展示key的作用。

首先,先来看一下没有key的效果:

import React, { Component } from 'react'

class App3 extends Component {
    constructor(props) {
        super(props) 
        this.state = {
            list: [
                {id: 1, value: '值1'},
                {id: 2, value: '值2'},
                {id: 3, value: '值3'}
            ]
        }
    }
    handleClick = () => {
        this.setState({
            list: [
                {id: 4, value: '值4'},
                {id: 1, value: '值1'},
                {id: 2, value: '值2'},
                {id: 3, value: '值3'}
            ]
        })
    }
    render() {
        return (
            <div>
                <button onClick={this.handleClick}>
                    点击↓
                </button>
                <ul>
                    {
                        this.state.list.map((v) => {
                            return (
                            // 这里没有设置key值
                                <li>
                                    { v.value }
                                </li>
                            )
                        })
                    }
                </ul>
            </div>
        )
    }
}

export default App3 

打开F12,点击按钮,看下运行的效果图:
在这里插入图片描述
看右侧代码,发现当点击按钮时,右侧4个li都发生了变化。说白了,就是原来的3个li,删除了,然后把这4个又重新生成了一遍。

再来看下设置了key值的效果:

import React, { Component } from 'react'

class App3 extends Component {
    constructor(props) {
        super(props) 
        this.state = {
            list: [
                {id: 1, value: '值1'},
                {id: 2, value: '值2'},
                {id: 3, value: '值3'}
            ]
        }
    }
    handleClick = () => {
        this.setState({
            list: [
                {id: 4, value: '值4'},
                {id: 1, value: '值1'},
                {id: 2, value: '值2'},
                {id: 3, value: '值3'}
            ]
        })
    }
    render() {
        return (
            <div>
                <button onClick={this.handleClick}>
                    点击↓
                </button>
                <ul>
                    {
                        this.state.list.map((v) => {
                            return (
                            // 这里设置了key值
                                <li key={ v.id }>
                                    { v.value }
                                </li>
                            )
                        })
                    }
                </ul>
            </div>
        )
    }
}

export default App3 

打开F12,点击按钮,看下代码的变化:
在这里插入图片描述
看右侧代码,点击按钮的时候,只有新增的li发生了变化,原来3个li都没有发生变化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值