React学习之条件渲染

本文介绍了React中的条件渲染,通过示例展示了如何根据不同的逻辑状态决定组件内容的显示,如使用if或三元运算符实现登录状态的判断。同时,文章还探讨了如何阻止条件渲染,当特定条件不满足时,使render方法返回null避免内容展示。
摘要由CSDN通过智能技术生成

说明:本系列所有demo代码的github地址为:https://github.com/Brucewu998/react.js-learning,笔者会不断更新这些代码,本篇代码在目录下demo-07文件夹下。

条件渲染

在React中,我们可以根据不同的需求来创建不同的组件,有时候在一些特定的场景中,我们需要呈现不同的状态,这个时候我们就可以利用条件渲染来完成这个需求。React中的条件渲染和JavaScript中一样,使用if运算或者条件运算符创建元素表示当前的状态,然后可以根据这些条件运算来更新UI。

这里列举一个登录的例子,例如有如下组件:

function Greeting(props) {
    const isLoggedIn = props.isLoggedIn;
    if (isLoggedIn) {
        return <h1>欢迎回来</h1>
    }

    return <h1>请登录</h1> 
}

当向组件传递的isLoggedIn值为真时,表示登录状态,这个时候<h1>欢迎回来</h1>就会被渲染出来,反之,当为退出状态时,<h1>请登录</h1>就会被渲染出来。

当然,这里除了使用if来判断,也可使用三目运算符来进行条件渲染:

function Greeting(props) {
    return <h1>{props.isLoggedIn ? "欢迎回来" : "请登录"}</h1> 
}

由此我们可以看出,有些情况下使用三目运算符要比使用if条件判断代码更加简洁,但两者实现的功能一样。

下面将这个实例完整代码附上,这个在demo7_条件渲染.html

class LoginControl extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isLoggedIn: false
        }
        this.handleLoginClick = this.handleLoginClick.bind(this);
        this.handleLogoutClick = this.handleLogoutClick.bind(this);
    }

    handleLoginClick() {
        this.setState({isLoggedIn: true});
    }
    handleLogoutClick() {
        this.setState({isLoggedIn: false});
    }
    render() {
        const isLoggedIn = this.state.isLoggedIn;
        let button;
        if (isLoggedIn) {
            button = <LogoutButton onClick={ this.handleLogoutClick} />;
        } else {
            button = <LoginButton onClick={ this.handleLoginClick } />;
        }

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

上面代码涉及到两个组件:登录与退出:


function LoginButton(props) {
    return (
        <button onClick={ props.onClick }>
            登录
        </button>
    )
}

function LogoutButton(props) {
    return (
        <button onClick={ props.onClick }>
            退出
        </button>
    )
}

最终效果:

    

阻止条件渲染

有的情况下,我们希望隐藏一些已经渲染出来的组件,这个时候我们可以使render方法直接返回null,不进行任何渲染。

创建一个组件:

function WarningBanner(props) {
    if(!props.warn) {
        return null;
    }
    return (
        <div className="warning">
            这是一条警告!
        </div>
    );
}

当warn属性为false时,我们不返回任何元素,只返回null。这个时候就可以阻止条件渲染,完整代码在demo7_阻止组件渲染.html

class Page extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            showWarning: true
        };
        this.handleToggleClick = this.handleToggleClick.bind(this);
    }

    handleToggleClick() {
        this.setState(state => ({
            showWarning: !state.showWarning
        }))
    }

    render() {
        return (
            <div>
                <button className="button" onClick={ this.handleToggleClick }>
                    {this.state.showWarning ? "隐藏" : "显示"}
                </button>
                <WarningBanner warn={ this.state.showWarning } />
            </div>
        )
    }
}

当我们点击显示的时候,会出现“这是一条警告”的提示,当点击隐藏的时候,则不会出现任何提示,因为这个时候传递的warn为false,返回的组件时null,所以render在渲染的时候渲染的内容为null,自然不会有仍和提示,效果如下图:

    

上一篇: React学习之事件处理

下一篇: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值