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是更少的封装,可以去自定义实现。

相关推荐
代码N年归来仍是新手村成员3 小时前
【AWS】Lambda 初识与服务部署
javascript·react.js·ai·node.js·云计算·ai编程·aws
大雷神4 小时前
HarmonyOS APP<玩转React>开源教程三十一:示例项目下载功能
react.js·开源·harmonyos
大鱼前端4 小时前
Veaury:让Vue和React组件在同一应用中共存的神器
前端·vue.js·react.js
五月君_4 小时前
继 React、Vue 之后,Three.js 也有 Skills 了!AI 写 3D 终于不“晕”了
javascript·vue.js·人工智能·react.js·3d
小崽崽14 小时前
如何实现React 19+Vite+TypeScript技术栈告别高薪主播!从零打造 24 小时“AI 销冠”:星云数字人直播间全链路实战
人工智能·react.js·typescript
光影少年6 小时前
Redux Toolkit 用法、解决原生Redux 冗余问题
开发语言·前端·javascript·react.js·中间件·前端框架·ecmascript
whuhewei7 小时前
一道React缓存的题目
javascript·react.js
GISer_Jing1 天前
前端沙箱开源项目推荐(React/Next/Vue优先)
前端·react.js·开源
暗不需求1 天前
React 性能优化秘籍:深入理解 `useMemo` 与 `useCallback`
前端·react.js·面试
向上的车轮1 天前
React 19 快速入门:拥抱服务端组件与新特性的现代化开发
前端·javascript·react.js