/ * * *必须要和反応反応-DOM以上16.7 * / インポートから、{useState、useEffect}リアクト '反応' エクスポートデフォルト()=> { CONST [名前のsetName] = useState( 'zhangsan' ) リターン( < > <P>私の名前である:{名前} </ P> の<input type = "text"の値= {名前}のonChange = {E =>のsetName(e.target.value)} /> </> ) }
これは非常に、非常に簡単なデモで、フックを使用して最初の、あなたが反応しなければならないと反応し、DOM 16.7を超えます。ここでは、どのような彼が欠けているが不足している、以前のクラスコンポーネントとは対照的に、機能コンポーネントを宣言し、このオブジェクトです。彼は、自身が第二が含まれている機能は、彼は我々はフックを使用していくつかの機能の最も明白であるライフサイクル・アプローチを、持っていないことができた何this.state、ない状態が存在しない、このテーマませんでした状態を保存します
CONST [名前、のsetName] = useState( 'zhangsan')
useEffect(()=> { にconsole.log( 'コンポーネントの更新' ) リターン()=> { にconsole.log( 'アンバインド' ) } }、[])
機能resolveDispatcher(){ CONSTディスパッチャ = ReactCurrentOwner.currentDispatcher。 不変( ディスパッチャ!== nullでは、 「フックが唯一の機能部品の本体内に呼び出すことができます。」、 ); 返すディスパッチャ; } エクスポート機能 useState <S>(初期状態:(()=> S)| S){ CONSTディスパッチャ = resolveDispatcher()。 リターンdispatcher.useState(初期状態)。 }
私たちは、戻り値がuseState dispatcher.useStateで、ディスパッチャ内useStateを参照してください。ディスパッチャ)は(resolveDispatcherと呼ばれている。この方法でresolveDispatcherこのディスパッチャ内部参照ReactCurrentOwner.currentDispatcherすることによって得られます。それはこれらの事を割り当てますレンダリングに来るとき、これはフォローアップです。そのため、任意のノードを取得していない段階を使用して反応させます。createElementの入ってくるオブジェクトが、実際にレンダリングしないときは、本当にこのインスタンスを作成していません。ReactCurrentOwnerは、グローバルクラスであります
CONST ReactCurrentOwner = { / * * * @internal * @type {ReactComponent} * / 電流:(ヌル:nullの | 繊維)、 currentDispatcher:(ヌル:nullの | ディスパッチャ) }。
これは、非常に単純なReactCurrentOwnerのソースコード、グローバルオブジェクトです。二つの特性がありますが、一つは現在のレンダリングノードである現在、強さです。currentDispatcherは、ディスパッチャに対応する強さです。useEffect同様のuseState。