亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談React之狀態(State)

2019-11-19 12:54:00
字體:
來源:轉載
供稿:網友

在React當中,當你更新組件的state,然后新的state就會重新渲染到頁面中。在這個時候不需要你操作任何DOM。你也可以認為組件在React當中是一個狀態機(State Machines)。當用戶進行操作時會實現不同的狀態,然后再渲染到你的頁面中,讓你的頁面與數據始終保持一致。

如何定義State

定義一個合適的State,是正確創建組件的第一步。State必須能代表一個組件UI呈現的完整狀態集,即組件的任何UI改變,都可以從State的變化中反映出來;同時,State還必須是代表一個組件UI呈現的最小狀態集,即State中的所有狀態都是用于反映組件UI的變化,沒有任何多余的狀態,也不需要通過其他狀態計算而來的中間狀態。

組件中用到的一個變量是不是應該作為組件State,可以通過下面的4條依據進行判斷:

1.這個變量是否是通過Props從父組件中獲取?如果是,那么它不是一個狀態。

2.這個變量是否在組件的整個生命周期中都保持不變?如果是,那么它不是一個狀態。

3.這個變量是否可以通過其他狀態(State)或者屬性(Props)計算得到?如果是,那么它不是一個狀態。

4.這個變量是否在組件的render方法中使用?如果不是,那么它不是一個狀態。這種情況下,這個變量更適合定義為組件的一個普通屬性,例如組件中用到的定時器,就應該直接定義為this.timer,而不是this.state.timer。

如果對狀態不好理解的朋友,你可以認為狀態即是數據!

State 與 Props 區別

props 是組件對外的接口,state 是組件對內的接口。組件內可以引用其他組件,組件之間的引用形成了一個樹狀結構(組件樹),如果下層組件需要使用上層組件的數據或方法,上層組件就可以通過下層組件的props屬性進行傳遞,因此props是組件對外的接口。組件除了使用上層組件傳遞的數據外,自身也可能需要維護管理數據,這就是組件對內的接口state。根據對外接口props 和對內接口state,組件計算出對應界面的UI。

主要區別:

  1. State是可變的,是一組用于反映組件UI變化的狀態集合;
  2. 而Props對于使用它的組件來說,是只讀的,要想修改Props,只能通過該組件的父組件修改。
    在組件狀態上移的場景中,父組件正是通過子組件的Props, 傳遞給子組件其所需要的狀態

現在我們先來通過ES6類React.Component完成一個通過點擊按鈕對DIV進行顯示與隱藏的操作,效果如下:

咱們先將頁面進行初始化:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Title</title>  <style>    #myDiv{      width:200px;      height:400px;      background:red;      color:yellow;      border:1px solid green;    }  </style>  <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>  <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>  <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script></head><body>  <div id="wrap"></div></body><script type="text/babel">  class MyComponent extends React.Component{    constructor(props){      super(props);      // 為當前狀態添加isShow屬性      this.state={        // 值為true顯示,false為隱藏。默認值為true。        isShow:true      }    }    render(){      //返回組件的初始內容      return <div>        <input type="button" value="顯示與隱藏"/>        <div id="myDiv">我在這里呀!</div>      </div>    }  }  ReactDOM.render(    <MyComponent/>,    document.querySelector("#wrap")  )</script></html>

到目前為止,頁面已經初始化完畢了。在上面的代碼中為state添加了一個默認值為true的屬性isShow。isShow用來控制div的顯示與隱藏!當isShow為true時顯示,為false時隱藏

接下來要完成的二件事。

第一件事是要為按鈕增加一個點擊事件,事件與changeState方法進行綁定。當點擊按鈕時改變isShow的狀態,也就是要為 isShow進行取反操作。

注意:

1、onClick中的c要大寫。
2、onClick后跟的方法不要用引號包裹,而是用{}
3、在ES6的class中React是不會自動綁定this的,所以需要自己通過bind綁定。
4、changeState方法中,不能直接修改isShow的值,而是需要借助setState方法來進行設置。

第二件事是要為id為myDiv的DIV增加一個style屬性,該屬性要根據isShow的狀態來對DIV進行顯示與隱藏

注意:

1、style的值不要用雙引號,而是用{},否則會報錯

最終版代碼:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Title</title>  <style>    #myDiv{      width:200px;      height:400px;      background:red;      color:yellow;      border:1px solid green;    }  </style>  <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>  <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>  <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script></head><body><div id="wrap"></div></body><script type="text/babel">  class MyComponent extends React.Component{    constructor(props){      super(props);      // 為當前狀態添加isShow屬性      this.state={        // 值為true顯示,false為隱藏。默認值為true。        isShow:true      }    }    changeState(){      //此處不能直接修改isShow的值。而是需要借助setState方法!      this.setState({        //取反操作        isShow:!this.state.isShow      });    }    render(){      //返回組件的初始內容      return <div>        {/*在ES6的class中React是不會自動綁定this的,所以需要自己綁定*/}        <input type="button" value="顯示與隱藏" onClick={this.changeState.bind(this)} />        <div id="myDiv" style={{display:this.state.isShow?'block':'none'}}>          我在這里呀!        </div>      </div>    }  }  ReactDOM.render(    <MyComponent/>,    document.querySelector("#wrap")  )</script></html>

由上面的示例可以發現,當你改變isShow的狀態時,div也會發生相對應的變化!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一级做a爰片久久毛片美女图片| 国产精品久久久久久亚洲影视| 成人黄色大片在线免费观看| 日产精品久久久一区二区福利| 国产成人精品在线播放| 国产欧美最新羞羞视频在线观看| 亚洲精品视频在线观看视频| 国产欧美精品日韩精品| 成人免费视频a| 在线视频一区二区| 国产精品一区二区电影| 欧美激情久久久久久| 中文字幕精品网| 亚洲新中文字幕| 亚洲人成在线一二| 成人在线视频网| 亚洲伊人成综合成人网| 亚洲欧洲自拍偷拍| 日韩av在线电影网| 91免费在线视频网站| 亚洲国产精品久久久久| 国产精品视频播放| 久久久久久噜噜噜久久久精品| 日韩国产精品一区| 日韩中文字幕免费视频| 中文字幕国产亚洲| 国产精品一区二区三| 欧美体内谢she精2性欧美| 亚洲欧美国产精品久久久久久久| 在线视频欧美日韩精品| 日韩激情视频在线播放| 亚洲视频精品在线| 国产91精品久| 福利一区视频在线观看| 亚洲人成电影在线播放| 91在线无精精品一区二区| 亚洲欧美日本伦理| 久久免费视频这里只有精品| 国产精品国产三级国产专播精品人| 国产精品美女999| 欧美性猛交99久久久久99按摩| 国产精品久久久久av| 欧美激情精品久久久久久久变态| 2019中文字幕在线免费观看| 国产在线视频91| 亚洲一区二区三区在线免费观看| 久久精品夜夜夜夜夜久久| 久久久国产视频91| 久久免费视频在线观看| 日韩欧美国产黄色| 中文字幕亚洲综合久久筱田步美| 青青草国产精品一区二区| 精品久久久久久久久中文字幕| 在线成人激情黄色| 91成人在线视频| 亚洲乱码国产乱码精品精| 久久久久久国产| 亚洲欧洲高清在线| 九九久久久久久久久激情| 久久99视频免费| 成人激情视频小说免费下载| 92国产精品久久久久首页| 国产精品久久久久久搜索| 国产日韩欧美一二三区| 91精品国产高清久久久久久久久| 欧美大人香蕉在线| 国内外成人免费激情在线视频网站| 国产91精品黑色丝袜高跟鞋| 国产精品电影网站| 亚州国产精品久久久| 少妇精69xxtheporn| 中文字幕av一区中文字幕天堂| 亚洲网在线观看| 懂色av中文一区二区三区天美| 亚洲精品福利视频| 久久精品视频99| 91免费福利视频| 亚洲精品福利在线观看| 国产欧美va欧美va香蕉在| 日韩中文字幕视频在线观看| 国产精品久久久91| 亚洲精品小视频在线观看| 国产精品久久久久久五月尺| 秋霞午夜一区二区| 国产视频欧美视频| 成人免费激情视频| 菠萝蜜影院一区二区免费| 久久免费视频网| 亚洲色图av在线| 亚洲奶大毛多的老太婆| 亚洲www在线观看| 国产日韩av在线播放| 97精品伊人久久久大香线蕉| 欧美做受高潮1| 日韩福利伦理影院免费| 欧美大片va欧美在线播放| 久久久亚洲国产| 欧美主播福利视频| 九九精品视频在线观看| 精品中文字幕在线| 久久久免费高清电视剧观看| 日韩专区中文字幕| 国产精品老女人视频| 日本高清视频一区| 欧美激情一区二区三区成人| 欧美性感美女h网站在线观看免费| 亚洲精品一区二区网址| 91日本在线视频| 欧美性极品xxxx做受| 国产精品久久久久久久天堂| 性色av一区二区三区在线观看| 国产一区二区香蕉| 久久久久久欧美| 久久人人爽人人爽爽久久| 国产偷亚洲偷欧美偷精品| 8050国产精品久久久久久| 狠狠做深爱婷婷久久综合一区| 亚洲欧美视频在线| 成人激情电影一区二区| 亚洲风情亚aⅴ在线发布| 精品久久久久久中文字幕一区奶水| 亚洲欧美日韩图片| 91热福利电影| 欧美性猛交xxxxx水多| 日本精品久久久久久久| 中文字幕精品国产| 欧美专区福利在线| 北条麻妃一区二区在线观看| 国产一区香蕉久久| 久久电影一区二区| 亚洲а∨天堂久久精品9966| 国产精品欧美一区二区三区奶水| 69av在线视频| 影音先锋欧美精品| 成人在线国产精品| 在线亚洲午夜片av大片| 亚洲国产成人爱av在线播放| 久久久久久久久国产精品| 亚洲a∨日韩av高清在线观看| 一本一本久久a久久精品综合小说| 欧亚精品在线观看| 日韩一区二区av| 国产一区二区视频在线观看| 亚洲成人av中文字幕| 国产精品久久9| 国产成人精品av| 亚洲精品午夜精品| 亚洲va欧美va在线观看| 国模视频一区二区| 狠狠综合久久av一区二区小说| 国产精品久久电影观看| 97在线看免费观看视频在线观看| 国产精品人人做人人爽| 性色av香蕉一区二区| 欧亚精品在线观看| 亚洲国产成人av在线| 亚洲人在线视频| 精品少妇一区二区30p| 久久精视频免费在线久久完整在线看| 91夜夜揉人人捏人人添红杏| 亚洲а∨天堂久久精品喷水| 亚洲人成网站777色婷婷| 91色视频在线导航| 精品视频在线播放免|