《React+Redux前端开发实战》—2.2.3 render()方法

举报
华章计算机 发表于 2019/07/24 23:36:37 2019/07/24
【摘要】 本节书摘来自华章计算机《React+Redux前端开发实战》一书中的第2章,第2.2.3节,作者是徐顺发.

2.2.3  render()方法

  render()方法用于渲染虚拟DOM,返回ReactElement类型。

  元素是React应用的最小单位,用于描述界面展示的内容。很多初学者会将元素与“组件”混淆。其实,元素只是组件的构成,一个元素可以构成一个组件,多个元素也可以构成一个组件。render()方法是一个类组件必须拥有的特性,其返回一个JSX元素,并且外层一定要使用一个单独的元素将所有内容包裹起来。比如:

  

    render() {

     return(

              <div>a</div>

              <div>b</div>

              <div>c</div>

     )

    }

  

  上面这样是错误的,外层必须有一个单独的元素去包裹:

  

    render() {

     return(

         <div>

          <div>a</div>

          <div>b</div>

          <div>c</div>

       </div>

   )

    }

  1.render()返回元素数组

  2017年9月,React发布的React 16版本中为render()方法新增了一个“支持返回数组组件”的特性。在React 16版本之后无须将列表项包含在一个额外的元素中了,可以在 render()方法中返回元素数组。需要注意的是,返回的数组跟其他数组一样,需要给数组元素添加一个key来避免key warning。

  render()方法返回元素数组示例:

  (源码地址为https://jsfiddle.net/n5u2wwjg/35080/)

  

  render() {

    return [

      <div key="a">a</div>,

      <div key="b">b</div>,

      <div key="c">c</div>,

    ];

  }

  

  除了使用数组包裹多个同级子元素外,还有另外一种写法如下:

  

  import React from 'react';

  export default function () {

      return (

          <>

              <div>a</div>

              <div>b</div>

              <div>c</div>

          </>

      );

  }

  简写的<></>其实是React 16中React.Fragment的简写形式,不过它对于部分前端工具的支持还不太好,建议使用完整写法,具体如下:

  

  import React from 'react';

  export default function () {

      return (

          <React.Fragment>

              <div>a</div>

              <div>b</div>

              <div>c</div>

          </React.Fragment>

      );

  }

  

  最后输出到页面的标签也能达到不可见的效果,也就是在同级元素外层实际上是没有包裹其他元素的,这样能减少DOM元素的嵌套。

  2.render()返回字符串

  当然,render()方法也可以返回字符串。

  render()方法返回字符串示例:

  (源码地址为https://jsfiddle.net/n5u2wwjg/35079/)

  

  render() {

   return 'Hello World';

  }

  

  运行程序,界面中将展示以上这段字符串。

  3.render()方法中的变量与运算符&&

  render()方法中可以使用变量有条件地渲染要展示的页面。常见做法是通过花括号{}包裹代码,在JSX中嵌入任何表达式,比如逻辑与&&。

  render()方法中使用运算符示例:

  

  const fruits = ['apple', 'orange', 'banana'];

  function Basket(props) {

    const fruitsList = props.fruits;

    return (

     <div>

       <p>I have: </p>

           {fruitsList.length > 0 &&

             <span>{fruitsList.join(', ')}</span>

           }

     </div>

    )

  }

  ReactDOM.render(<Basket fruits={fruits}/>, document.querySelector("#app"))

  

  上述代码表示,如果从外部传入Basket组件的数组不为空,也就是表达式左侧为真, &&右侧的元素就会被渲染。展示效果如图2.2所示。如果表达式左侧为false,&&右侧元素就会被React忽略渲染。

image.png

  4.render()方法中的三目运算符

  在render()方法中还能使用三目运算符condition  true : false。

  在render()方法中使用三目运算符示例:

  (源码地址为https://jsfiddle.net/n5u2wwjg/35239/)

  

  class App extends React.Component {

     constructor(props) {

     super(props);

          this.state = {

           isUserLogin: false

          }

      }

      render() {

        const { isUserLogin } = this.state;

        return (

          <div>

            { isUserLogin  <p>已登录</p> : <p>未登录</p> }

          </div>

        )

      }

  }

  ReactDOM.render(<App/>, document.querySelector("#app"))

  

  上述代码根据isUserLogin的真和假来动态显示p标签的内容,当然也可以动态展示封装好的组件,例如:

  

  return (

      <div>

          { isUserLogin  <ComponentA /> : <ComponentB /> }

      </div>

  )


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。