第一組讀書會 2-6 ~ 2-7 #17
LoisChen68
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
簡報:
導讀人: Aya
筆記工: Lois
問題討論
Q: 每個檔案最多可以有幾個 default export ?
A: 1 個
Q: UI 跟 Component 的區別
A: UI = 畫面 = 使用者介面,不是在指某個機制
Q: 策略二的一律清空畫面是模擬 React 的行為嗎?
A: 不是,2-6 在講實現單向資料流的 DOM 渲染策略都不是在指任何一個框架,而是在純 JavaScript 情境中能夠實現單向資料流的常見策略
Q: React 官方文件提到的 one-way data flow 是指它的東西會從最上層傳到最下層,還是指資料與畫面分離,這兩件事是同一件事嗎
A: 這是在講同一件事,但這裡不是在講單向資料流本身的意義,而是單向資料流在 React 中要做出的效果,這句話其實就是單一資料流的結果
Zet 額外補充:
React 官方文件都只講結果,不講概念的本質,因為閱讀門檻高,就像翻遍官方文件找不到 React element 的詞,唯一能看到 React element 的詞只有在 createElement 可以找到,因為他放棄治療解釋什麼是 React element,所以現在都用 JSX element 這個說法在指 React element,反正沒有人會手動寫 React.createElement ,大家都寫 JSX,但真的懂 React 的人不可能不知道 React element
<Component/>
跟{Component()}
兩者呼叫的差異console.log
出來的結果會是什麼?答案是
BFoo
這個 component function 是否已經被呼叫過?答案是
沒有Foo()
來呼叫,React 只會當作它是一個普通的 funcion,它只是一個首字母為大寫的 functionReact.createElement
React.createElement
來呼叫 a ,仍會被當作是一個 component,只是不能寫 JSX,因為如果寫 JSX ,它會以為是一個 DOM element 類型Foo()
來呼叫在結構上並不會有Foo
這個節點所以其實使用
Foo()
來呼叫就等同於直接將 React element 填入<Foo />
只是在描述我希望這裡產生一個 Foo component 實例的這件事,但還沒被呼叫{Foo()}
來呼叫,在 runtime 時 JavaScript 引擎分辨不出這裡要建立一個 component 的實例,只是單純在描述一段 React element 的表達式{}
來呼叫,即使父 component 被 re-render,該子 component 因為被判定為同一個 component 為不會被 re-render<Foo />
填入 component 內,每次這個 component 被 re-render 的時候都會重新建立一個 React element,所以在 component 內部的<Foo />
縱使長相一樣,但仍然是不同的參考<Foo />
沒有動態的 props ,則可以踢出 component 外面,但如果是有動態的 props ,則可以提升到外層,並使用 props 將<Foo />
傳入,如下範例能夠做到在Container
觸發 re-render 時,並不會觸發到Foo
的 re-renderQ: 要避免 children 不必要的渲染,透過
React.memo
包起來跟用 props 傳遞,這兩者有什麼區別?A: 有區別,但能做到差不多的結果,通常東西是完全固定的話就不需要使用到
React.memo
,去做 memo 會做額外的比較,也會花效能,雖然可能不大,但如果是 props 是動態的,除了提升到外層,也可以用React.memo
,只是 memo 會比較所有值是否相同,有的時候提出來會影響到抽象化看起來不直覺或是 component 設計獨立性好不好呼叫的問題,但 Zet 大多數情況下不會使用React.memo
,除非遇到效能問題,但就結果來說,這兩種做法都可以,但沒有一定要在什麼情況下怎麼樣做。Q: 通常用什麼方式檢查 component 渲染很多次
A:
console.log
是最簡單的方法,但如果很了解這個機制,本來就會很有意地避免這個問題,但有的情況是這個東西被 re-render 也沒差,因為效能耗費不大,但有的情況是這個東西就不應該放在這裡被 re-render,這在寫的時候,如果你了解這個機制就會特別注意這個情況,或是適合放在這裡,但遇到效能問題,那就會用一些方法處理。或是使用 React 開發者工具 的 profiler 來視覺化分析哪些 component 特別花時間跟多次被 re-render。
基本習慣要養成好,但不需要過早優化,如果一開始寫就包
React.memo
,那也不好,因為 memo 也會花額外的效能,遇到效能上的瓶頸時再來處理效能優化。Beta Was this translation helpful? Give feedback.
All reactions