美文网首页
Conditional Rendering(条件渲染)

Conditional Rendering(条件渲染)

作者: 灯火葳蕤234 | 来源:发表于2019-03-23 21:19 被阅读0次

假设我们有一个tag数组,并把它渲染为一个列表:

class Counter extends Component {
    state = {
        tags: ['tag1','tag2','tag3']
    };
    render() { 
        return (
            <div>
                <ul>
                    {this.state.tags.map(tag => <li key={ tag }>{ tag }</li>) }
                </ul>
            </div>
        );
    }
}
  • 现在有一个新需求,如果数组列表至少有一个项,我们就渲染它,如果一个都没有,就输出一段文字“没有任何标签”,怎么实现呢?
  • 在 jsx 中是没有 if 语句的,因为 jsx 不是模板化引擎。所以为了更好地渲染,我们要回到 js 的层面。
方法一:
  • 构建一个辅助方法,这个方法中包含 if 逻辑判断,辅助方法中返回的可以只是简单文字,可以返回一个 jsx 语句,也就是一个react元素(如,p 标签)。这是数组列表为空的情况,列表不为空时,可以按照原来的渲染方式渲染:
class Counter extends Component {
    state = {
        tags: ['tag1','tag2','tag3']
    };
    renderTags() {
        if(this.state.tags.length === 0) return <p>There are no tags!</p>;
        return <ul>{ this.state.tags.map(tag => <li key={ tag }>{ tag }</li>) }</ul>;
    }
    render() { 
        return <div>{ this.renderTags() }</div>;
    }
方法二:
  • 假设我们想渲染一个给定条件的情况,只有一个 if 分支,没有else的部分,我们可以添加一个大括号,将渲染条件放在逻辑与"&&"的前面,将要渲染的内容放在逻辑与"&&"的后面:
class Counter extends Component {
    state = {
        tags: []
    };
    renderTags() {
        if(this.state.tags.length === 0) return <p>There are no tags!</p>;
        return <ul>{ this.state.tags.map(tag => <li key={ tag }>{ tag }</li>) }</ul>;
    }
    render() { 
        return <div>
          {this.state.tags.length === 0 && 'Please create a new tag!'}
          { this.renderTags() }
        </div>;
    }
  • 保存修改,回到浏览器,我们得到了刚刚设置的信息 'Please create a new tag!',这组字符只有在数组为空的时候才被渲染,这是怎么实现的呢?
  • js不同于其他的编程语言,我们可以在不是布尔值的值之间使用逻辑运算符号:
true && false      //false
true && 'Hi'       //'Hi'
true && 'Hi' && 1  //1
true && false && 1 //false
  • 当js编译器处理一个布尔表达式时,它先看第一个值,当第一个值为真的时候,它就看第二个值,若第二个值不是布尔值,js编译器尝试转换成 类真 或 类假 值。空字符串是被视为 类假 的,一个非空的字符串是 类真 的值。
  • 在" true && 'Hi' "中,Hi被看成是 类真 值,所以实际上表达式的两边都是 类真 值。这种情况下 js 编译器返回第二个类真值"Hi" .

相关文章

  • Conditional Rendering(条件渲染)

    假设我们有一个tag数组,并把它渲染为一个列表: 现在有一个新需求,如果数组列表至少有一个项,我们就渲染它,如果一...

  • 6.Conditional Rendering(条件渲染)

    React版本:15.4.2**翻译:xiyoki ** 在React中,你可以创建许多不同的组件,这些组件封装了...

  • js的条件渲染(conditional rendering)

    对于以下视图树 如何实现视图树中的三目操作符呢 React的做法是生成虚拟树,与旧树diff在Vanilla js...

  • [React] Conditional Rendering

    We always use the follow two ways to conditional render i...

  • 离屏渲染

    On-Screen Rendering Off-Screen Rendering 界面的渲染过程 渲染过程: 如何...

  • test

    Enzyme Shallow Rendering - 不会渲染子组件DOM Rendering - 渲染子组件 U...

  • 离屏渲染

    On-Screen Rendering 在屏渲染 Off——Screen Rendering 离屏渲染 当我们设置...

  • 精读《React 八种条件渲染》

    1 引言 本期精读的文章是:8 React conditional rendering methods 介绍了八种...

  • 渲染 Rendering

    在进行iOS的性能优化中,会碰到卡顿的问题,虽然iOS设备的性能越来越高,但是卡顿的问题还是有可能会出现,而离屏渲...

  • 基础

    条件编译(conditional compiling)

网友评论

      本文标题:Conditional Rendering(条件渲染)

      本文链接:https://www.haomeiwen.com/subject/ykhevqtx.html