Reactソース読解-9_040
2089 ワード
Reactソース読解-9
前に书いたのは1つの学习のノートに相当して、仕事の中の技术はすべて
いくつかの準備作業公式貢献ガイド https://zh-hans.reactjs.org/d...
原生の
採用した数字は16進数です.
指定されたなぜ16進数に値を付けたのか 0 xeac 7はReact に少し似ているように見えます です. https://juejin.im/entry/5c170...疑惑を解決し、 を防止した.
https://developer.mozilla.org...
react 16.8.6
のソースコードを読み続けます前に书いたのは1つの学习のノートに相当して、仕事の中の技术はすべて
react
関系ですが、80%
はすべていくつかふだんめったに触れないので、自分のreact
に対する认识は比较的に一面的です.いくつかのreact
のapi
はめったに使われず、react
を通じて読むことで、react
のすべてのapi
といくつかの関連特性の使用シーンを系統的に熟知した.公式のドキュメントとreact.js
に従ってソースコードを読み続けます.いくつかの準備作業
ReactSymbols
The Symbol used to tag the ReactElement-like types
すなわち ReactElement Symbol
;原生の
Symbol
符号またはpolyfill
がなければ、通常の数字で表される.採用した数字は16進数です.
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
Symbol.for(key)
メソッドは、所与のキーkey
に従って、実行時のsymbol
レジストリから対応するsymbol
を見つけ、見つかった場合はそれを返し、そうでなければ、そのキーに関連付けられたsymbol
を新規に作成し、グローバルsymbol
レジストリに格納する.指定された
key
によって見つかったsymbol
を返します.そうでなければ、新しく作成されたsymbol
を返します.Symbol()
とは異なり、Symbol.for()
メソッドで作成されたsymbol
は、グローバルsymbol
レジストリに格納されます.Symbol.for()
は、毎回新しいsymbol
が作成されるわけではありません.まず、指定されたkey
がレジストリに登録されているかどうかを確認します.もしそうであれば、前回保存したものに直接戻ります.そうでなければ、新しいexport const REACT_ELEMENT_TYPE = hasSymbol
? Symbol.for('react.element')
: 0xeac7;
export const REACT_PORTAL_TYPE = hasSymbol
? Symbol.for('react.portal')
: 0xeaca;
export const REACT_FRAGMENT_TYPE = hasSymbol
? Symbol.for('react.fragment')
: 0xeacb;
export const REACT_STRICT_MODE_TYPE = hasSymbol
? Symbol.for('react.strict_mode')
: 0xeacc;
React
一貫性を維持するために、要素に$$typeof
のプロパティが定義されますが、number
の値に設定されます.0xeac7
xss
注入攻撃https://developer.mozilla.org...