React的条件渲染和列表循环

react的本质

react没有像vue一样的v-forv-if等指令,一切操作本质上都是通过js的运算生成不同的内容来进行渲染,从而得到不同的页面。

条件渲染的本质

  1. react当渲染undefinednull、空字符串、false时,是不会渲染成任何内容的
  2. 如果渲染一个jsx编写的html元素,就会解析html内容并将其渲染为页面上的DOM节点

条件渲染的方式

条件渲染可以通过多种方式,只需要根据一个js表达式的结果来渲染。

if 语句

js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        msg: {
            name: "启示录",
            singer: "G.E.M."
        },
        show: true,
        arr: ["I", "Am", "Gloria", "Word", "Tour"]
    }
    changeState = () => {
        this.state.show = !this.state.show;
        this.setState(this.state);
    }
    fn1() {
        if (this.state.show) {
            return <h1>{this.state.msg.name}-{this.state.msg.singer}</h1>
        } else {
            return <h1>{this.state.msg.name}</h1>
        }
    }
    render() {
        return (
            <>
                <div>条件渲染</div>
                {this.fn1()}
                <button onClick={this.changeState}>修改state</button>
            </>
        )
    }
}

三目运算符

在 JSX 中必须包含表达式,而不是语句。所以在 JSX 中只能使用三元表达式({表达式}),而不是 if 语句来编写条件。

js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        msg: {
            name: "启示录",
            singer: "G.E.M."
        },
        show: true,
        arr: ["I", "Am", "Gloria", "Word", "Tour"]
    }
    changeState = () => {
        this.state.show = false;
        this.setState(this.state);
        console.log("执行了修改");
    }
    render() {
        return (
            <>
                <div>条件渲染</div>
                {this.state.show ? <h1>摩天动物园</h1> : ""}
                <button onClick={this.changeState}>修改state</button>
            </>
        )
    }
}

&&运算符

js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        show: true
    }
    changeState = () => {
        this.state.show = !this.state.show;
        this.setState(this.state);
    }
    render() {
        return (
            <>
                <div>条件渲染</div>
                <button onClick={this.changeState}>{this.state.show?"显示":"隐藏"}</button>
            </>
        )
    }
}

列表循环的本质

  1. react渲染一个数组会把数组里的每一项单独取出渲染
  2. 编写一个里面存放的都是html结构的数组,就会渲染成列表
js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        show: true,
        arr: ["I", "Am", "Gloria", "Word", "Tour"]
    }
    render() {
        return (
            <>
                <div>循环列表</div>
                {this.state.arr}
            </>
        )
    }
}

循环原数据并生成存着html结构的新数组,将新数组渲染为列表

js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        show: true,
        arr: ["I", "Am", "Gloria", "Word", "Tour"]
    }
    render() {
        return (
            <>
                <div>循环列表</div>
                {this.state.arr.map(item => {
                    console.log(item)
                    return <h1>{item}</h1>
                })}
            </>
        )
    }
}
js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        arr: ["I", "Am", "Gloria", "Word", "Tour"]
    }
    addData = () => {
        this.state.arr.push('YYDS');
        this.setState(this.state);
    }
    render() {
        return (
            <>
                <div>循环列表</div>
                <button onClick={this.addData}>添加列表项</button>
                {this.state.arr.map((item, index) => {
                    return <div key={index}>{item}</div>
                })}
            </>
        )
    }
}

循环渲染的唯一索引 key

和vue同理,遍历时必须有唯一索引 key 来提高遍历的效率。

js 复制代码
import React, { Component } from "react";
export default class Home extends Component {
    state = {
        show: true,
        arr: ["I", "Am", "Gloria", "Word", "Tour"]
    }
    render() {
        return (
            <>
                <div>循环列表</div>
                {this.state.arr.map((item, index) => {
                    return <h1 key={index}>{item}</h1>
                })}
            </>
        )
    }
}

vue指令开发和react的jsx开发

vue:各种效果可以用指令进行编写,对于简单的控制很容易

react:各种效果都通过逻辑运算产出对应的渲染内容,能够完整控制整个过程。react比vue是更少的封装,可以去自定义实现。

相关推荐
it_remember6 小时前
新建一个reactnative 0.72.0的项目
javascript·react native·react.js
ZHOU_WUYI11 小时前
使用 Docker 部署 React + Nginx 应用教程
nginx·react.js·docker
互联网搬砖老肖14 小时前
React组件(一):生命周期
前端·javascript·react.js
小马哥编程14 小时前
React和Vue在前端开发中, 通常选择哪一个
前端·vue.js·react.js
OK_boom17 小时前
React-useRef
javascript·react.js·ecmascript
GISer_Jing18 小时前
React底层架构深度解析:从虚拟DOM到Fiber的演进之路
前端·react.js·架构
邝邝邝邝丹1 天前
React学习———React Router
前端·学习·react.js
郝开1 天前
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析
react.js·前端框架·react
Coding的叶子2 天前
Node.js 安装 + React Flow 快速入门:环境安装与项目搭建
react.js·node.js·react flow·fgai·react agent
刺客-Andy2 天前
React 第四十一节Router 中 useActionData 使用方法案例以及注意事项
前端·react.js·前端框架