Chapter4: React.js
This section contain the following items:
1.Introduction
2.Getting started
3.JSX
4.life cycle
5.Data flow: prop vs. prop.children, state
6.Layout, Event Handing
7.Using JQuery in React
8.Using D3.js in React
9.Dynamic Routing
1.Introduction
React發源自Facebook的PHP框架XHP的一隻分支. XHP作為一個PHP框架, 旨在每次有請求進來時渲染整個畫面. React的產生就是為了把這種重新渲染畫面的PHP式工作流帶到客戶端應用中.
React本質上是一個狀態機, 他只關心兩件事:
React贏就贏在最小化了重繪, 並避免了不必要的DOM操作,這兩點都是公認的性能瓶頸
[reference]: React 引領未來的用戶介面開發框架
2.Getting started
3.JSX
3.1 what is JSX ?
3.2 複合組件
3.3 JSX跟HTML的差異
4.life cycle
可分為實例化, 存在期, 銷毀&清理期:
Initialization (實例化):
一個實例初次被創建時所調用的生命週期方法, 與其他各個後續實例被創建時所調用的方法略有不同.
getDefaultProps():
只有第一次創建時會被調用, 在創建任意组件时,我们可以通过getDefaultProps方法给他定義一些属性.
当我们需要在render方法使用某些數據時,可以在getDefaultProps() 函数中定義這個属性,然後通过{this.props.style}來進行獲取:
對象或數組都會在所有實例中共享
新版改為以下寫法:
getInitialState():
當物件被調用時此方法會在寫入 DOM 之前被觸發,通常用來管理狀態的元件可以用這個方法初始化一些資料,用來初始化每個實例的state, 可以訪問到this.props
當components完成render後, 可使用setState改變this.state的內容, 此時會重新render以達成動態改變畫面的效果
新版改為以下寫法:
componentWillMount():
render被調用前最後可以修改組件state的最後機會
这個时候DOM结構已经渲染了.這個時候就可以初始化其他框架的設置了,如果利用jQuery绑定事件等等.
render():
此函數將創建虛擬DOM
是唯一一個必須的方法
必須滿足下面幾點:
render返回的並不是真正的DOM, 而是一個虛擬的表現, React將會將他與真實的DOM做對比, 來判斷是否有必要作出修改.
componentDidMount():
當元件被寫入 DOM 之後觸發。當初始化需要操作 DOM 元素就可以用這個方法
可以在這邊使用getDOMNode()
2) Props Changes, State Changes (存在期):
componentWillReceiveProps(nextProps)
shouldComponentUpdate(nextProps, nextState)
componentWillUpdate(nextProps, nextState)
render()
componentDidUpdate(prevProps, prevState)
3) Unmounting (銷毀&清理期):
reference:
5.Data flow: prop vs. prop.children, state
prop: property的縮寫
1.this.prop:
指定單一個由上層元件所傳入的參數, 需寫在標籤內 (字串符)
2.this.prop.children
上層元件所傳入的參數陣列, 寫在標籤的內容中
3.propTypes:
propTypes 使用來規範元件Props的型別與必需狀態
當父元件沒有提供props的屬性時,可以採用getDefaultProps,
預設props屬性的方式,讓元件使用預設的設定值,確保有props帶入。
React.PropTypes 的種類:
React.PropTypes.array // 陣列
React.PropTypes.bool.isRequired // Boolean 且必要。
React.PropTypes.func // 函式
React.PropTypes.number // 數字
React.PropTypes.object // 物件
React.PropTypes.string // 字串
React.PropTypes.node // 任何類型的: numbers, strings, elements 或者任何這種類型的陣列
React.PropTypes.element // React 元素
React.PropTypes.instanceOf(XXX) // 某種XXX類別的實體
React.PropTypes.oneOf(['foo', 'bar']) // 其中一個字串
React.PropTypes.oneOfType([React.PropTypes.string,
React.PropTypes.array]) // 其中一種格式類型
React.PropTypes.arrayOf(React.PropTypes.string) // 某種類型的陣列(字串類型)
React.PropTypes.objectOf(React.PropTypes.string) // 具有某種屬性類型的物件(字串類型)
React.PropTypes.shape({ // 是否符合指定格式的物件
color: React.PropTypes.string,
fontSize: React.PropTypes.number
});
React.PropTypes.any.isRequired // 可以是任何格式,且必要。
state與props的差別是在於state只存在組件的內部
this.state -> 同層物件
1.this.setState
setState is done to 'set' the state of a value, even if its already set
in the 'getInitialState' function.
2.this.replaceState
The replaceState() method is for when you want to clear out the values
already in state, and add new ones.
this.props -> 上層物件
6. Layout, Event Handing
1.將影像佈滿背景:
7.Using JQuery in React
1.Install Jquery
2.Use AJAX by JQuery
1.Import:
2.Call AJAX API
3.webpack.config.js
8.Using D3.js in React
1.install d3
2.Import d3
3.Basic structure could contain: constuctor(), componentDidMount(), componentWillReceiveProps(), render()
1.put svg and its d3 components in render(), such as Arc, circle.
2.put parameters that you would like to pass to render() by this.props and this.state, you can initial them in constructor()
3.After components mounted, you can do something to change UI or event trigger something, do in componentDidMount()
9.Dynamic Routing
1.Introduction
要完成SPA (Single Page Application)不可或缺的就是dynamic routing, 在React的生態系中可以使用react-route這個套件來協助我們完成.
2.Install package
Main Entry
定義routing rule及URL的宣告方式
1.import package
2.宣告routing的components
舉例來說, 假設我們有三個Page需要做routing, 便需要定義在Main Entry中
1.Router, History
2.Route
), document.getElementById('container'))
導覽列 (nav bar或button)
連結到routing components
Last updated
Was this helpful?