我目前正在閱讀 React 源代碼。在大多數情況下,他們更喜歡類模式而不是工廠函式作為實體的建構式。
直到我遇到ReactElement:react/packages/react/src/ReactElement.js
評論表明他們故意選擇不遵守班級模式。
/**
* Factory method to create a new React element. This no longer adheres to
* the class pattern, so do not use new to call it. Also, instanceof check
* will not work. Instead test $$typeof field against Symbol.for('react.element') to check
* if something is a React Element.
*
* @params omitted
* ...
*/
const ReactElement = function(type, key, ref, self, source, owner, props) {
// code omitted
}
但是按照這個評論,至少有兩個明顯的缺點,
- 用戶不能使用
new ReactElement()實體化元素(他們在其他地方使用的方式)。 element instanceof ReactElement不再作業。
我相信他們做出這個選擇是有充分理由的,但只是沒有在評論中列出。任何人都可以給出一些解釋嗎?
uj5u.com熱心網友回復:
該函式只回傳一個帶有$$typeof: REACT_ELEMENT_TYPE. 無需將其設為類建構式。我認為這樣做更容易被 JS 引擎優化。
用戶不能使用 new ReactElement() 來實體化元素(他們在其他地方使用的方式)。
React 最終用戶永遠不會自己呼叫它。他們打電話React.createElement()。
element instanceof ReactElement不再作業。
作為最終用戶(參見 React 內部開發人員),您是否曾經需要過類似的東西?您將檢查 JSX 樹的內部結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/455406.html
標籤:javascript 反应 班级 工厂模式
上一篇:OracleRestAPI多行
