EDITORIAL
2018年には、コンファレンス会議を反応させるのチームに反応我々は現在、既存の開発プロセスに反応使用し、エキサイティングな概念を導入した問題のいくつかを説明:フック、フックとどのようにこれらの問題を解決するために反応します。+ TS +ノードにこのテクノロジ・スタックを使用して反応させ、フロントエンドは、前にいくつかの時間をアップグレードするだけで私のチームは、このプロセスにおいて機能するようにフックを使用して、バージョン16.8に反応します。あなた自身の気持ちや意見を書いてください。
このホワイトペーパーでは、次のセクションを要約します:
- 前フックを反応させるのは何の痛みのポイントが存在しますか?
- フックは、コードパターンの変化をもたらす反応
- 概要
- 深い読み
前フックを反応させるのは何の痛みのポイントが存在しますか?
困難な多重同様のロジック・アセンブリ1.ルーム
フックを反応させる前には出てくる、コンポーネント間の反応の多重化ロジックを提供することができますミックスインを使用していますが、この方法の欠点が非常に多く、私たちは基本的に多重化する小道具(属性をレンダリング)をレンダリング使用し、HOC(高次成分)論理コンポーネント間。欠点は二つの方法でも、非常に明白である。しかし、つまり、コンポーネントは、デバッガのコストを増大させる、簡単な肥大化され、「ラッパー地獄」を生成することは容易です。
質問2.ライフサイクル
ライフサイクルの中で少し複雑なビジネスロジックでは、過去の周りではありません。現場で治療componentDidmountのロジックの多くはcomponentDidUpdateに再び対処しなければならなかったがあり、ビジネスは、様々な異なるライフサイクル機能に散乱されます。
フックから、表示されたプログラムに向けライフサイクルにビジネス指向論理プログラミング
3.人と機械はフレンドリークラスではありません
フックの前に、純粋に機能的な構成要素を記述することが可能であるが、それは唯一のステートレスことができますが。非常に多くの場合、あなたは純粋な機能コンポーネントを記述しますが、時間をかけて、あなたがプラスの状態を見つける必要があり場合は、この時間は、純粋に機能的なコンポーネントクラスのコンポーネントに置き換えなければなりませんでした。この時点で、私たちはこの問題に対処する必要がありますが、コンパイラのクラスは、非友好的です。
フックは、コードパターンの変化をもたらす反応
import { useState, useEffect } from 'react'
function Example(props) {
// 声明一个新的状态变量"count"
const [count, setCount] = useState(0);
useEffect(() => {
subscribe(props.number, setCount)
return () => {
unsubscribe(props.number)
}
})
return <div>{count}</div>
}
复制代码
useState初期値を受け入れて、[戻りステータス、ステータスモディファイ ]タプル。たびに再レンダリング全体の機能が再実行されますが、useStateは、最後の値を記憶しています。そして、帰属の状態を記憶するために呼び出すuseState順序に従って反応します:
const Example = () => {
const [size, setSize] = useState({ width: 100, height: 100 });
const [count, setCount] = useState(0);
}
复制代码
各例は、レンダリングされ、useStateサイズとのsetSizeを取得するために呼び出して初めてです、二useStateは、カウントとsetCountを取得するために呼び出します。
useEffectは以前componentDidMountとcomponentDidUpdateと同等の副作用を治療するために使用されます。これは、アンインストールするアセンブリの前に呼び出される関数を返すことができます。したがって、重合操作useEffect componentDidMount、componentDidUpdateとcomponentWillUnmount。props.numberが変更されていない場合は、我々は再実行での退会/サブスクライブuseEffectたくない、この動作を実現するためには、あなただけがパラメータを渡す必要があります。
useEffect(() => {
subscribe(props.number, setCount)
return () => {
unsubscribe(props.number)
}
}, [props.number])
复制代码
それは限り、配列の各値は変更しないように、あなたはuseEffectを再実行する必要はありません、配列です。
アップグレードが反応する後は、ライフサイクルの機能は以下のように動作することができ、機能部品への移行します:
- コンストラクタ:使用useStateは状態を初期化します。
- getDerivedStateFromProps:機能モジュール自体を直接操作することができます。
- shouldComponentUpdate:使用React.memo。
- レンダリング:コンポーネント自体の機能を。
- componentDidMount、componentDidUpdate、componentWillUnmount:使用useEffectを達成。
開発の過程では、機能部品の形で共有コードをフックを反応させます。useXXXの始まりを使用することで合意し、機能部品は、呼び出すことでuseXXXことができ、コードを再利用したいと思います。
たとえば、私たちは、コンポーネントが実装するときのログをプリントアウトし、useMountLogを書くことができます。
const useMountLog = (name) => {
useEffect(() => {
console.log(`${name} mounted`);
});
}
复制代码
その結果、機能部品のすべてがuseMountLogを呼び出すことで、この機能を使用することができます。
const Example = () => {
useMountLog('Example')
}
复制代码
別の例は、フック幅useWindowWidthカスタムを書き込むことによって、現在のウィンドウに反映させることができます
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('resize', handleResize);
};
});
return width;
}
复制代码
これは、他の機能的な構成要素で使用することができます。
function MyResponsiveComponent() {
const width = useWindowWidth();
return (
<p>Window width is {width}</p>
);
}
复制代码
上記の例で見ることができ、フックが大幅にコードの私たちの量を減らす反応します。フックは唯一の機能コンポーネントで使用することができ、それはまだクラスコンポーネントが反応サポートしていますが、クラスコンポーネントの後にゆっくりすぎて死んでしまいますが、予測することが可能です。
概要
フックが表示され反応し、大幅に反応するの本来の使用の開発で遭遇する問題の一部を解決するために反応するコードの量を削減するだけでなく、開発にいくつかの変更をもたらします。含みます:
- 反応するフックは、コンポーネント間の双方向コードの再利用を変更します。カスタムフックを使用し、混乱のミックスインは、HOCがもたらす何の階層深淵をもたらしません。
- ビジネス指向のプログラミング・ロジックのライフサイクルのためのプログラミング
- もはやクラスに必要な、もはやこれと他の問題に集中する必要はありません
最後に、この記事の最後にダン・アブラモフ監督の演説を引用コンファレンス2018リアクト:
」......私はのリアクトロゴは、その後、私はこの説明を考えた?原子である理由。私たちは、そのことが原子で構成されて知っているだろうに使用される、原子の特徴である物質の外観と動作を決定します。同様に反応して、あなたはユーザーを表示することができます原子のような、別々のコンポーネントに分割した後、遊離結合、アセンブリの特性は、ユーザビューの挙動決定である。科学者は一度小さな原子内側原子は、電子の発見まで、最小不可分単位であったと考え粒子。実際には、影響は原子の電子的性質の特徴である。私はより直接的でエレクトロニクスのようなフックは、それが知られているように、それは、それほど新しい機能ではありません性質(状態、状況、ライフサイクル)と反応だと思います我々はそれに目をつぶってきた4年でフォームを表示します。
ロゴ見つめ、それを見に反応した場合は、実際にされてフックを見つけるでしょう。"
深い読み
ます。https://juejin.im/post/5cfb1e12f265da1b8a4f0f1eで再現