《React+Redux前端开发实战》—2.2 组件的主要成员

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

2.2  组件的主要成员

  在React中,数据流是单向流动的,从父节点向子节点传递(自上而下)。子组件可以通过属性props接收来自父组件的状态,然后在render()方法中渲染到页面。每个组件同时又拥有属于自己内部的状态state,当父组件中的某个属性发生变化时,React会将此改变了的状态向下递归遍历组件树,然后触发相应的子组件重新渲染(re-render)。

  如果把组件视为一个函数,那么props就是从外部传入的参数,而state可以视为函数内部的参数,最后函数返回虚拟DOM。

  本节将学习组件中最重要的成员state和props。

2.2.1  状态(state)

  每个React组件都有自己的状态,相比于props,state只存在于组件自身内部,用来影响视图的展示。可以使用React内置的setState()方法修改state,每当使用setState()时,React会将需要更新的state合并后放入状态队列,触发调和过程(Reconciliation),而不是立即更新state,然后根据新的状态结构重新渲染UI界面,最后React会根据差异对界面进行最小化重新渲染。

  React通过this.state访问状态,调用this.setState()方法来修改状态。

  React访问状态示例:

  (源码地址为https://jsfiddle.net/allan91/etbj6gsx/1/)

  

  class App extends React.Component {

    constructor(props){

      super(props);

      this.state = {

       data: 'World'

      }

    }

   

    render(){

      return(

       <div>

             Hello, {this.state.data}

       </div>

      )

    }

  }

  ReactDOM.render(

   <App />,

   document.querySelector(''#app'')    // App组件挂载到ID为app的DOM元素上

  )

  

  上述代码中,App组件在UI界面中展示了自身的状态state。下面使用setState()修改这个状态。

  React修改状态示例:

  (源码地址为https://jsfiddle.net/allan91/etbj6gsx/3/)

  

  class App extends React.Component {

    constructor(props){

      super(props);

      this.state = {

       data: 'World'

      }

    }

   

     handleClick = () => {

     this.setState({

           data:'Redux'

      })

    }

   

    render(){

      return(

       <div>

             Hello, {this.state.data}

              <button onClick={this.handleClick}>更新</button>

       </div>

      )

    }

  }

  ReactDOM.render(

   <App />,

   document.querySelector("#app")

  )

  

  上述代码中通过单击“更新”按钮使用setState()方法修改了state值,触发UI界面更新。本例状态更改前后的展示效果,如图2.1所示。

 image.png

图2.1  修改state


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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