第八章 react前端开发-条件渲染

本文介绍了React中实现条件渲染的方法,通过示例展示了如何根据用户登录状态动态显示不同组件。同时,讲解了如何使用元素变量来有条件地渲染组件的部分内容,并展示了在JSX中使用逻辑与运算符(&&), 列表渲染以及在实际场景中的应用,如登录控制器组件的实现。
摘要由CSDN通过智能技术生成

React可以创建不同的组件来封装各种行为,还可以根据应用状态变化只渲染其中的一部分。

React 中的条件渲染和JavaScript一致,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。

上面的介绍可能不直观,通常来说,条件渲染就是通过条件不同来渲染不同的页面,类似于其他编程语言中的if else

下面是一个非常典型的条件渲染例子,根据用户是否登录来动态展示提示信息

import React from "react"
import ReactDOM from "react-dom"

function UserGreeting(props) {
    return <h1>欢迎光临!</h1>;
}

function GuestGreeting(props) {
    return <h1>您还没有注册,即将跳转到注册页面</h1>;
}

function Greeting(props) {
    const isLoggedIn = props.isLoggedIn;
    if (isLoggedIn) {
        return <UserGreeting />;
    }
    return <GuestGreeting />;
}

ReactDOM.render(
    <Greeting isLoggedIn={false} />,
    document.getElementById('root')
);

结果:

通过上面的例子,相信应该清楚了条件渲染的概念了 

8.2 元素变量

在实际编程中可以使用变量来储存元素。它可以有条件的渲染组件的一部分,而输出的其他部分不会更改。

如下例子所示:

import React from "react"
import ReactDOM from "react-dom"

function UserGreeting(props) {
    return <h1>greeting3</h1>
}

function GuestGreeting(props) {
    return <h1>please reg3</h1>
}

function Greeting(props) {
    const isLogIn = props.isLogIn
    if (isLogIn) {
        return <UserGreeting />
    } else {
        return <GuestGreeting />
    }
}

function LogInButton(props) {
    return <button onClick={props.onClick}>
        login
    </button>
}

function LogOutButton(props) {
    return <button onClick={props.onClick}>
        logout
    </button>
}

class LoginController extends React.Component {
    constructor(props) {
        super(props)
        this.logInClick = this.logInClick.bind(this)
        this.logOutClick = this.logOutClick.bind(this)
        this.state = {isLogIn : true}
    }

    logInClick() {
        this.setState({
            isLogIn : true
        })
    }

    logOutClick() {
        this.setState({
            isLogIn : false
            }
        )
    }

    render() {
        const isLogIn = this.state.isLogIn
        let button
        if (isLogIn) {
            button = <LogOutButton onClick={this.logOutClick}/>
        } else {
            button = <LogInButton onClick={this.logInClick}/>
        }

        return (
            <div>
                <Greeting isLogIn={false}/>
                {button}
            </div>
        )
    }
}

ReactDOM.render(
    <LoginController />,
    document.getElementById("root")
)

结果:

8.3 与运算符 &&

React支持通过用大括号包裹代码在 JSX 中嵌入任何表达式 ,也包括 JavaScript 的逻辑与 &&,可以方便地条件渲染一个元素。

用过javascript的伙伴都知道,在JavaScript 中,true && expression 总是返回后面的expression,而 false && expression 总是返回 false。因此,如果条件是 true,&& 右侧的元素就会被渲染,如果是 false,React 会忽略并跳过它。

下面例子演示了这个功能

import React from "react"
import ReactDOM from "react-dom"

function Mailbox(props) {
    const unreadMessages = props.unreadMessages;
    return (
        <div>
            <h1>邮箱</h1>
            {unreadMessages.length > 0 &&
            <h2>
                您有 {unreadMessages.length} 条未读信息。
            </h2>
            }
        </div>
    );
}

const messages = ['message1', 'message2', 'message3'];
ReactDOM.render(
    <Mailbox unreadMessages={messages} />,
    document.getElementById('root')
);

结果:

8.4 list使用

import React from "react"
import ReactDOM from "react-dom"

const numbers = [1, 2, 3, 4, 5]
const listnumbers = numbers.map((item) =>
    <li>{item + 1}</li>
);

const root = ReactDOM.createRoot(document.getElementById("root"))
root.render(
    <ul>{listnumbers}</ul>
)

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值