Open gracekrcx opened 4 years ago
const people = {
body: {
height: 50,
weight: 120
}
}
const people2 = people
people2.body.height = 180
people2 === people // true
shallowCompare
const shallowCompare = require('react-addons-shallow-compare')
const Button = React.createClass({
shouldComponentUpdate : function( nextProps, nextState ) {
return shallowCompare(this, nextProps, nextState);
}
})
後來 React 為了避免開發者在組件中總是要寫這樣一段同樣的代碼,進而推薦使用 React.PureComponent
Hook 是 function,他讓你可以從 function component「hook into」React state 與生命週期。 Hook 擁抱 JavaScript closure
提示:通過忽略 Effect 來最佳化效能 這個要求很常見,所以已內建在 useEffect 的 Hook API 中。如果在重新 render 之間某些值沒有改變,你可以讓 React 忽略 effect。為此,請將 array 作為可選的第二個參數傳遞給 useEffect:
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // 僅在計數更改時才重新執行 effect
接收一個 context object(React.createContext 的回傳值)並回傳該 context 目前的值。
Context provides a way to pass data through the component tree without having to pass props down manually at every level. 提供 pass data through the component tree 不需要一層一層用 props 傳
How does shallow compare work in react
it compares their values.
it does not compare their attributes - only their 『references』 are compared
只在最上層呼叫 Hook
不要在 loop、 Conditions 或是巢狀的 function 內呼叫 Hook。
只在 React Function 中呼叫 Hook
別在一般的 JavaScript function 中呼叫 Hook。
The filter() method creates a shallow copy of a portion of a given array
Virtual DOM
Lifecycle
The componentDidMount() method runs after the component output has been rendered to the DOM. This is a good place to set up a timer
Lifecycle methods
Initialization
Mounting
Updating
Unmounting
在 Updating:props 有 componentWillReceiveProps,state 沒有
Immutable
Immutable 翻成中文就是永遠不變的,意思就是:「當一個資料被創建之後,就永遠不會變了」。如果需要更改資料的話,就創一個新的。
Immutable Data
bug 示範
因為 newList 和 list 是相同的記憶體位置,又有 shouldComponentUpdate 在確認需不需要 render ,這時畫面上的操作就會有問題。(如果沒有 shouldComponentUpdate 畫面會正常,但還是建議,在 setState 時要給一個記憶體不一樣的值)(Immutable Data : 當回傳的是一個新的值,才可以有效的去比較新舊的差異)
深比較與淺比較
deep comparison : 值一個一個比較,所以結果會是 true 💙💙 shallow comparison : 比較記憶體位置,也就是 ===,所以 a===b 會是 false shallow compare 歸結為兩點:
shouldComponentUpdate
把更新 state 和檢查 state 切開來寫,之後比較好維護
可以利用 componentDidUpdate() 來對 state 做一些檢查
Uncontrolled Component
參考文章
shouldComponentUpdate() 從頭打造一個簡單的 Virtual DOM Day04 - Virtual DOM & V-Node Developing modern offline apps with ReactJS, Redux and Electron ReactJs component lifecycle methods — A deep dive React 效能優化 — PureComponent