🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

React:显示列表

在 React 组件的显示里面,我们经常需要根据组件里的数据去显示一个组件的列表。可以使用数组的 map 方法得到一组列表,然后放在组件的显示里用一下。注意列表里的每个项目都应该有个 key 属性,并且每个项目的  key 属性的值都应该不一样。下面这个练习可以帮您理解在 React 组件里显示列表。

有个 Message 组件是这样的:

const Message = (props) => {
  return <div>{ props.message }</div>
}

再改造一下 App 组件,先在组件的 State 里添加一组要显示的数据:

  state = {
    header: 'ninghao.net',
    show: false,
    messages: [
      { id: 0, text: 'hello ~'},
      { id: 1, text: 'hola ~'},
      { id: 3, text: '您好 ~'}
    ]
  }

上面我们添加了一个 messages ,它里面有一个 id 属性,还有个 text 属性,这个 messages 里的数据我打算用 Message 这个组件来显示。先去生成一个组件列表,在 App 组件的 render 方法里,用一下 map 方法:

const { messages } = this.state
const messageItems = messages.map(message => {
  return <Message key={ message.id } message={ message.text } />
})

先从 this.state 里把 messages 拿出来用一下,然后用一下 messagesmap 方法,循环处理一下这组数据。每次循环的时候当前项目用 message 来表示,每次循环都返回一个 Message 组件。组件里添加了 key 属性,它的值是 message 里的 id ,每个 messageid 属性的值都不一样。又传递了一个 message 属性,对应的值是 message 里的 text 属性。我们把循环后的结果交给了 messageItems

这样在 App 组件的 render 方法里的 return 里面,可以绑定输出这个 messageItems。现在点击界面上的 show 按钮,会显示一组 Message 组件。组件上用的数据来自 App 组件的 state 里的 messages 这个数据。

现在 App.js 是这样的:

import React, { Component } from 'react'

class Header extends Component {
  state = {
    emoji: '👪'
  }

  render () {
    return (
      <h2 onClick={ (event) => this.props.changeHeader(event, this.state.emoji) }>
        { this.props.header }
      </h2>
    )
  }
}

const Message = (props) => {
  return <div>{ props.message }</div>
}

class App extends Component {
  state = {
    header: 'ninghao.net',
    show: false,
    messages: [
      { id: 0, text: 'hello ~'},
      { id: 1, text: 'hola ~'},
      { id: 3, text: '您好 ~'}
    ]
  }

  changeHeader = (event, emoji) => {
    this.setState({
      header: emoji
    })
    console.log(event, emoji)
  }

  handleClick = () => {
    this.setState({
      show: !this.state.show
    })
  }

  render () {
    const { messages } = this.state
    const messageItems = messages.map(message => {
      return <Message key={ message.id } message={ message.text } />
    })

    console.log(messageItems)

    return (
      <div>
        <Header changeHeader={ this.changeHeader } header={ this.state.header } />
        <button onClick={ this.handleClick }>
          { this.state.show ? 'Hide': 'Show' }
        </button>
        { this.state.show &&
          messageItems
        }
      </div>
    )
  }
}

export default App
React
微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点