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

条件渲染

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 extends React.Component {state = {table: [{id: 0,name: '渔'},{id: 1,name: '樵'},{id: 2,name: '耕'},{id: 3,name: '读'},]}render() {return (<div><table border="1"><thead><tr><th>nanoid</th><th>ID</th><th>名字</th></tr></thead><tbody>{this.state.table.map(item => {const key = nanoid()return (<tr key={key}><td>{key}</td><td>{item.id}</td><td>{item.name}</td></tr>)})}</tbody></table></div>)}
}
ReactDOM.render(<MyTable />,document.getElementById('app')
)

key赋值的正确姿势

  • 注意:React明确规定,key不能作为属性传递给子组件,必须显示传递key值(使用别的属性名,如sid)
  • 防止开发者在逻辑中对key值进行操作
  • MyBody: key is not a prop. Trying to access it will result inundefinedbeing returned. If you need to access the same value within the child component, you should pass it as a different prop.
    在这里插入图片描述
import { nanoid } from 'nanoid'
class MyTitle extends React.Component {render() {return (<thead><tr><th>nanoid</th><th>ID</th><th>名字</th></tr></thead>)}
}
class MyBody extends React.Component {render() {// 这里constructor super都省略了const { sid, item } = this.propsreturn (<tr key={sid}><td>{sid}</td><td>{item.id}</td><td>{item.name}</td></tr>)}
}
class MyTable extends React.Component {state = {table: [{id: 0,name: '渔'},{id: 1,name: '樵'},{id: 2,name: '耕'},{id: 3,name: '读'},]}render() {return (<div><table border="1"><MyTitle /><tbody>{this.state.table.map(item => {const key = nanoid()return (// 分别是传入的2个props 以及自身组件循环时的key<MyBody sid={key} item={item} key={key} />)})}</tbody></table></div>)}
}
ReactDOM.render(<MyTable />,document.getElementById('app')
)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表的翻转

public ListNode reverseListNode(ListNode node){ ListNode pre null; ListNode now node;//当前节点 while (now !null){ ListNode after now.next; now.next pre; pre now; now after; } …

面向对象命名空间、组合

一 类命名空间与对象、实例的命名空间 创建一个类就会创建一个类的名称空间&#xff0c;用来存储类中定义的所有名字&#xff0c;这些名字称为类的属性 而类有两种属性&#xff1a;静态属性和动态属性 静态属性就是直接在类中定义的变量动态属性就是定义在类中的方法class Pers…

css --- 使用媒体查询当屏幕宽度小于某个值时,隐藏掉某个类

Bootstrap提供了一个封装好的类: .hidden-xs: 当屏幕宽度<768px时隐藏 .hidden-sm: 当屏幕768px < 宽度<992px时隐藏 .hidden-md: 当屏幕992px< 宽度<1200px时隐藏 .hidden-lg: 当屏幕宽度>1200px时隐藏 下面使用css3的 媒体查询来实现: media screen and…

09 受控组件

含义 受控组件&#xff1a;由state来决定表单内部的数据&#xff0c;由表单的事件处理函数来更改state的方式 class App extends React.Component {// 1. state是表单的唯一数据源state {name: }handleChange (e) > {// 2. 控制表单操作并同步statethis.setState({name:…

剑指Offer--青蛙跳台阶引发的一系列问题

题目描述 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法&#xff08;先后次序不同算不同的结果&#xff09;。解法一&#xff08;效率最高&#xff09;数学归纳法&#xff1a;public class Solution {public int JumpFloo…

css --- 伸缩布局,让图片居中

很明显,想要星星位于文字的正下方. // html <section id"lz_about" class"hidden-xs hidden-sm"><div class title text-center"><h1><strong>关于我</strong></h1><img src"./imgs/star.jpg" cla…

day9-Python学习笔记(二十)数据库备份,修改父类的方法

数据库备份&#xff0c;修改父类的方法 import os,datetimeclass BakDb(object): def __init__(self,ip,username,passwd,port3306,path/tmp/db_bak): self.ip ip self.username username self.passwd passwd self.port port self.path path …

10 非受控组件以及受控与非受控的选择方案

含义 非受控组件&#xff1a;表单数据不受控与state的&#xff08;未绑定value&#xff09;&#xff0c;使用React ref从DOM节点中获取表单数据的组件提示refs弃用 class MyForm extends React.Component {constructor(props) {super(props)}submit (e) > {e.preventDef…

wampserver3.0.6 外网 不能访问

# 开始 今天在服务器上安装了wampserver3.0.6 然后在我的电脑浏览器上面打开服务器ip提示 Forbidden 下面一行小字提示没有权限访问"/"目录 # 解决 打开 httpd-vhost.conf 文件 修改成如下 # Virtual Hosts #<VirtualHost *:80>ServerName localhostServerAlia…

javascript --- 在linux上部署项目

最近对照视频,用bootstrap jquery 写了一个纯前端页面.想把它放在服务器上,供远程使用. 准备服务器和域名 我服务器和域名是在腾讯云上租的,网址: https://cloud.tencent.com/ 注: 域名很便宜,挑个好的哈哈哈… 服务器(阿里云有个学生价…但是我那个学生价的账号找不到了…)…

【openssl】利用openssl完成X509证书和PFX证书之间的互转

利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装&#xff1a; 1、下载地址&#xff1a; 官方网址—— https://www.openssl.org/source/ OpenSSL for Windows —— http://gnuwin32.sourceforge.net/packages/openssl.htm 2、安装&#xff1a;此处已OpenSSL…

11 父子组件数据关系与状态提升

含义 状态提升&#xff1a;两个组件&#xff08;无父子关系&#xff09;共享一个数据并且同步数据变化类组件调用&#xff08;实例化&#xff09;的时候&#xff0c;组件内部的状态是唯一且独立的组件嵌套与调用&#xff0c;和是类组件&#xff08;render&#xff09;还是函数…

SQL SERVER 一个SQL语句的执行顺序

SQL SERVER 一个SQL语句的执行顺序 原文:SQL SERVER 一个SQL语句的执行顺序一个SQL 语句的执行顺序 1、From (告诉程序 来自哪张表 如果是表表达式 依旧是如此顺序) 2、Where&#xff08;条件筛选 谓词筛选 &#xff09; 3、Group by&#xff08;分组&#xff09; 4、Having&…

JS-事件内置对象event

getKeyCode(event)当中的event必须全部小写&#xff0c;是JS中时间内置对象&#xff0c;可以直接拿来用&#xff0c;event内种对象代表此刻发生的事件 1 <!doctype html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 …

工具分享 --- 分享一个在线制作ico的网站

还不错… 生成后一般放在imgs的下面. link:favicon tab 导入链接http://www.faviconico.org/

laravel迁移文件

laravel迁移文件的命令 Laravel鼓励敏捷、迭代的开发方式&#xff0c;我们没指望在第一次就获得所有正确的。我们对于自己编写代码,可以通过迁移文件,不断的重复去测试.对于工作&#xff0c;我们开发一个完整的项目,是需要我们每个人相互配合,就好比用svn,git版本控制工具来存储…

12 组合与继承、CSS Module

组合与继承 若Container内部有内容&#xff0c;React会在props内部增加children属性若Container内部有非元素内容&#xff0c;children&#xff1a;非元素内容若Container内部有单个元素内容&#xff0c;children&#xff1a;React元素对象若Container内部有多个元素内容&…

工具分享 --- tinyPNG,大图片压缩工具

今天自己的写的项目跑在了远程服务器上… 图片加载的速度让人难以接受, 于是各种百度找到了一个在线找到了个图片压缩的网站 TinyPNG 可以看一下压缩的效果…真心不错啊… 网站如下: https://tinypng.com 额…有些大于5M的需要钱,才能压缩… 用系统画图工具…貌似也能压缩… …

Mysql 忘记管理员密码更改

对管理员设置密码第一种方式&#xff1a;#mysqladmin -u root password new-password;#mysqladmin -u root -h localhost password new-password;mysql的选项可以不带空格&#xff0c;有时候带空格是错 第二种方式&#xff1a; set password for rootlocahostPASSWORED(); 第三…

ironic如何支持部署时按需RAID?

ironic如何支持部署时按需RAID&#xff1f; 新浪大神推荐使用element proliant-tools制作deploy image。element proliant-tools会在ipa ramdisk中安装一个rpm包hpssacli&#xff08;HP的RAID管理工具&#xff09;&#xff0c;和一个python module proliantutils&#xff08;里…