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

相关推荐
Revolution618 小时前
React 组件重新渲染时,到底重新执行了什么
前端·react.js·面试
林焱_RPAAI8 小时前
影刀RPA技术深度:CSS选择器高级实战指南——伪类属性选择器与性能对比完全解析
vue.js·react.js
名字还没想好☜15 小时前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js
10share15 小时前
React 新一代样式隔离方案 —— 编译时、零运行时、原生写法
前端·react.js
光影少年16 小时前
RN 的EventEmitter 双向通信
前端·react native·react.js
GuWenyue1 天前
90%前端写React+TS都踩坑!从组件类型、单向数据流到本地存储完整实战
前端·react.js
张元清2 天前
React useThrottle Hook:节流值与回调(2026)
javascript·react.js
烬羽2 天前
React 状态提升:一个 ColorPicker,彻底搞懂状态该放哪里
react.js·typescript·设计
console.log('npc')2 天前
React 跨项目集成实战:iframe 实现子项目详情弹窗
前端·javascript·react.js
无人生还2 天前
从 Vue3 到 React · 快速上手系列第 8 篇:组件通信与 Context(对标插槽与 provide/inject)
前端·vue.js·react.js