07、08 条件渲染、列表渲染

这篇博客主要介绍了React中如何实现条件渲染和列表渲染。条件渲染利用JSX表达式,避免使用v-if等指令。在HTML中使用JSX时,需要注意table元素的完整性和警告。列表渲染通过map函数实现,并强调了每个列表项应有独特的key属性,提醒开发者避免使用index作为key,推荐使用数据的唯一id。此外,还讨论了key值的正确赋值方式,强调key不应作为子组件的属性传递。
摘要由CSDN通过智能技术生成

条件渲染

React没有像v-if、v-show这样的指令,需要使用JSX表达式组合而成
// 与运算 三目
// 判断表达式一定是false/null/undefined时才不会被渲染,0、空字符串、NaN会显示
// 如果render函数返回null,不会进行任何渲染

......
      state = {
        showLeft: false
        // showLeft: undefined, // 与运算中效果同false
        // showLeft: null, // 与运算中效果同false
        // showLeft: 0 // 在与运算中会显示
        // showLeft: Number(undefined) // 在与运算中会显示
      }
......
      {
             !this.state.showLeft && <Right />
       }

在这里插入图片描述
在这里插入图片描述

HTML中使用JSX

  • <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  • <script type="text/babel"> </script>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
  <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  <title>React 条件渲染</title>
</head>

<body>
  <div id="app"></div>
  <script type="text/babel">
    class Left extends React.Component {
      render() {
        return (
          <div>Left</div>
        )
      }
    }
    class Right extends React.Component {
      render() {
        return (
          <div>Right</div>
        )
      }
    }
    class Main extends React.Component {
      state = {
        showLeft: false
        // showLeft: undefined, // 与运算中效果同false
        // showLeft: null, // 与运算中效果同false
        // showLeft: 0 // 在与运算中会显示
        // showLeft: Number(undefined) // 在与运算中会显示
      }
      handleClick() {
        this.setState({
          showLeft: !this.state.showLeft
        })
      }
      render() {
        return (
          <div>
            <h1>Main</h1>
            <button onClick={this.handleClick.bind(this)}>{this.state.showLeft ? 'turn Right' : 'turn Left'}</button>
            {
              // 1. 三目运算
              // this.state.showLeft ? <Left /> : <Right />
            }
            {
              // 2. 与运算
              this.state.showLeft && <Left />
            }
            {
              !this.state.showLeft && <Right />
            }
          </div>
        )
      }
    }
    ReactDOM.render(
      <Main />,
      document.getElementById('app')
    )
  </script>

</body>

</html>

列表渲染 JSX → map

table相关warning

JSX中使用table,若未加tbody、thead会告警
在这里插入图片描述

key相关warning

  • Each child in a list should have a unique “key” prop.(列表中的每个子元素都必需有一个唯一的key属性值)
  • key是React确定元素是否改变的唯一标识,key必需在兄弟节点中是唯一的
    在这里插入图片描述

不建议使用index作为key值的情况

  • 建立在列表顺序改变、元素增删的情况下:列表增删或顺序变了,index对应项就会改变
  • 若列表是静态不可操作的,可以选择index作为key值
  1. 用数据唯一的id作为key
  2. 动态生成一个静态id nanoid yarn add nanoid 每次render都会生成不同的id
import {
    nanoid } from 'nanoid'
class MyTable 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于微信小程序条件列表渲染,我可以给你一些简单的介绍。 在微信小程序中,可以通过条件列表渲染来展示符合特定条件的数据列表,例如根据用户输入的关键字搜索匹配的数据。具体实现方法如下: 1. 首先,需要在小程序中定义一个列表变量,用于存储符合条件的数据列表。 ``` data: { list: [] } ``` 2. 接着,在小程序中定义一个输入框和一个搜索按钮,用于接收用户输入的关键字并触发搜索操作。 ``` <view> <input bindinput="inputChange" placeholder="请输入关键字" /> <button bindtap="search">搜索</button> </view> ``` 3. 在搜索按钮的事件处理函数中,可以通过 wx.request 发送请求获取符合条件的数据列表,并将数据列表存储到列表变量中。 ``` search: function () { var that = this; wx.request({ url: 'http://xxx.com/search', data: { keyword: that.data.keyword }, success: function (res) { that.setData({ list: res.data.list }) } }) } ``` 4. 最后,在小程序中定义一个条件列表,通过 wx:if 判断列表是否为空,如果不为空,则通过 wx:for 渲染数据列表。 ``` <view wx:if="{{list.length > 0}}"> <view wx:for="{{list}}"> <text>{{item.title}}</text> </view> </view> <view wx:else> <text>暂无数据</text> </view> ``` 通过以上方法,就可以实现微信小程序中的条件列表渲染。 需要注意的是,为了保证用户体验,应该在用户输入关键字后自动触发搜索操作,在搜索过程中应该显示加载提示等反馈信息,以提高用户的使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值