四、列表和Keys

渲染列表数据是非常常见的场景,例如做一个展示用户的列表,需要根据获取的用户数据进行渲染列表。

class UserList extends Component {
    constructor() {
        this.state = {
            userList:[
                {
                    id: '23243',
                    info:{
                        name: 'sxww',
                        age: 26
                    }
                },
                {
                    id: '232434',
                    info:{
                        name: 'zzz',
                        age: 28
                    }
                },
            ]
        },
        this,handleClick = this.handleClick.bind(this); //es6class中,必须手动绑定方法this的指向
    }
    handleClick(id) {
        const userList = this.state.userList.map(item => {
            const newItem = item.id === id ? {...item,vote: ++item.vote} : item;
            return newItem;
        })
        this.setState({
            userList
        })
    }
    render() {
        return (
            <ul>
                {
                    this.state.userList.map(item =>
                        <User info={item.info} handleClick={this.handleClick} />
                    )
                }
            </ul>
        )
    }
}
export default UserList;

运行后控制台报错:

 

应该为列表每一项添加key(一般使用列表数据的id作为key),React用Key标记每个元素,当数据变化时,React可以通过key知道哪些元素发生变化,从而只渲染发生变化的元素,提高渲染效率。

<User info={item.info} handleClick={this.handleClick} key={item.id}/>

不推荐使用索引作为key,因为一旦列表中的数据发生重排,数据的索引也会改变,不利于react渲染。列表元素的key不能重复,但只限于当前列表,不是全局唯一

posted on 2022-10-20 17:40  Zoie_ting  阅读(50)  评论(0编辑  收藏  举报