国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

react:組件初識 && 生命周期 && tips

miqt / 1142人閱讀

react組件

參考:https://facebook.github.io/re...

react的組件是其核心思想部分,react允許將整個ui設計分割稱為獨立的、可復用的隔離模塊,react的組件是一個抽象的類,直接使用reacy.component是沒有很大意義的,所以一般使用的方法就是定義一個 class 來繼承這個component,并且需要實現方法 render();就像下面一樣:

      class Greeting extends React.Component {
          render() {
            return 

Hello, {this.props.name}

; } }

如果不想使用es6的class,也可以使用react提供的react.createClass({}),就像如下:

var Hello = React.createClass({
    render: function() {
        return 
Hello Taobao, Hello UED
; } });

對于定義好的組件,就可以直接使用了,react在使用html標準標簽和react組件標簽時是通過首字母來進行區別的,大寫首字母就是自定義組件,無論是自定義組件還是html標準標簽,處理的方式是一樣的,使用React.createElemment來進行過組件的引用:

React.createElement(
  type,
  [props],
  [...children]
)

這也是說明在jsx中無法書寫 if for之類的語句,且可以使用js表達式的原因了。可以看看:http://reactjs.cn/react/tips/...

// This JSX:
Hello World!
// Is transformed to this JS: React.createElement("div", {id: if (condition) { "msg" }}, "Hello World!"); ReactDOM.render(
Hello World!
, mountNode);
react生命周期

主要是三個部分:Mounting、Updating、Updating三個部分
參考:https://facebook.github.io/re...
https://segmentfault.com/a/11...

mounting (實例化階段)這個階段的方法都是在組件被實例化、插入DOM中的過程中被順序調用的

getDefaultProps、getInitialState或者 constructor(props)

【前兩者es5寫法,都是配合create-react-class可以設置初始 props、state的內容,】

var createReactClass = require("create-react-class");
var Greeting = createReactClass({
getDefaultProps: function() {
  return {
    name: "Mary"
   };
 },
getInitialState: function() {
  return {count: this.props.initialCount};
},
 // ...

});

【后者使用es6寫法,通過使用class就可以完成上面的操作,比較的簡單】

class Greeting extends React.Component {
constructor(props) {
  super(props);
  this.state = {count: props.initialCount};
}
 // ...
}

Greeting.defaultProps = {
  name: "Mary"
  };

在實例化之前counstructor會被調用,首先需要執行的是 super(props),這句需要在構造函數的最前面,這里也是最適合初始化state的地方,如果這個組件不需要state、也不需要綁定任何方法,可以不調用constructor函數,

componentWillMount()

在實例化時最開始執行,在這里同步的修改state不會引起重新的渲染,在這里需要注意的是,官網有這樣一段話: This is the only lifecycle hook called on server rendering. Generally, we recommend using the constructor() instead. 我的理解是服務端渲染的實例化階段只會執行componentWillMount這一個鉤子,不過參考的文章:https://segmentfault.com/a/1190000004168886#articleHeader3  有這樣的描述,這里具體就不太清楚了: 

render() 補充部分有說明

componentDidMount()

官網說了,這個是在實例化完成立刻調用的函數,所以如果需要異步請求的話這里是最好的選擇,然后更新state,從而進行重新渲染。

updating (更新期)在組件的props、state發生變化需要重新渲染時調用這個階段的函數

componentWillReceiveProps(nextProps)
在實例化完成以后,如果有新的props將接受了,可以在這里處理props的對比,可能props沒有改變也會觸發這個鉤子函數,可能輸父級元素的重新渲染,只在更新期才會觸發,當然在更新期修改state并不會觸發

shouldComponentUpdate()
在更新期接受到了props和state后,這里可以對比props和state,從而分析是否需要進行重新的渲染,這個函數在forceUpdate()來進行強制刷新時不會被調用,這個函數會返回布爾值,當返回false時,后面的willupdate、render、didupdate都不會執行,不過這并不會影響改組件的子元素的渲染,當子元素的props或者state有變化時還是會重新渲染。

componentWillUpdate(nextProps, nextState)
這里最好不要做stestate的事情,setstate可以在componentWillReceiveProps時使用,如果shouldComponentUpdate返回false則不會調用了。

render()

componentDidUpdate()
這里是進行DOM操作的最佳時機,也是發起異步請求數據的好時機

unmounting (銷毀期)當組件需要從DOM中移除時,或者頁面切換時需要調用

componentWillUnmount()
這里可以用來消除創建的定時器、dom元素、異步請求等資源

補充

render()函數在實例化和更新時都會被調用,除了在更新時起發生了componentWillUnmount()返回false這種情況,render執行時會檢測props、state和是否只返回來了一個人頂級元素,也可以使用返回null或者false這樣的,會被忽略渲染,render函數最好也是純函數,

setState(updater, [callback]),這是一個異步操作,所以這并不會立刻改變satte的值,甚至會等上好幾次的修改來合并進行,

forceUpdate,進行強制渲染,一般而言最好是不用,使用的話將不會調用更新階段的shouldComponentUpdate()鉤子函數,

一張引用的圖片“

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83016.html

相關文章

  • react: 組件初識 && 生命周期 && 相關說明

    react組件 參考:https://facebook.github.io/re... react的組件是其核心思想部分,react允許將整個ui設計分割稱為獨立的、可復用的隔離模塊,react的組件是一個抽象的類,直接使用reacy.component是沒有很大意義的,所以一般使用的方法就是定義一個 class 來繼承這個component,并且需要實現方法 render();就像下面一樣: ...

    jokester 評論0 收藏0
  • 如何用ahooks控制時機的hook?

      本篇主要和大家溝通關于ahooks ,我們可以理解為加深對 React hooks 的了解。  我們先說下關于抽象自定義 hooks。構建屬于自己的 React hooks 工具庫。  其實我們應該培養閱讀學習源碼的習慣,工具庫是一個對源碼閱讀不錯的選擇。  注:本系列對 ahooks 的源碼解析是基于v3.3.13。  現在就進入主題用ahooks 來封裝 React要注意的時機?  Fun...

    3403771864 評論0 收藏0
  • React 學習之路 (四) state & 生命周期

    摘要:如果需要交互,應該在生命周期中進行交互。生命周期過程中涉及三個主要的動作術語表示正在掛接虛擬到真實。每當組件第一次加載到中的時候,我們都想生成定時器,表示正在被重新渲染。組件是真正隔離的每一個都會建立自己的定時器,并獨立的更新。 state & 生命周期 state 我們之前實現的時鐘,實現方式是每個一秒進行一次渲染dom,但是這種方法并不合理。我們想要通過一種狀態來控制組件,實現更優...

    羅志環 評論0 收藏0
  • 解讀useEvent顯著降低Hooks負擔的原生Hook

      想要做到就要有更多的學習,你知道為什么React不把他們設為默認方法#useEvent是一個剛剛提案的原生Hook,還處于RFC。現在我們就一起來討論下  RFC:Request for Comments 提案應用的還十分廣泛  我們先看看在沒有 useEvent 會出現的情況:  functionChat(){   const[text,setText]=useState(''...

    3403771864 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<