何が反応18で新しいですか?
5478 ワード
何が反応18で新しいですか?
反応の新しいバージョンがアウトされ、それは現在利用可能ですnpm ! これはいくつかの新しい興味深い機能を紹介しています.任意のコードを変更したり、新しい概念を学び、非常に重要なことは、既存のコードのいずれかを中断しないことはありません.
👉ハウツーとスタイル
それはかなり既存のプロジェクトでの反応の最新バージョンに更新する簡単です.18に反応するように更新するには、以下の手順に従ってください.
// for npm
npm install react@18 react-dom@18
//or for yarn
yarn add react@18 react-dom@18
// Before
import { render } from 'react-dom';
const container = document.getElementById('app');
render(<App />, container);
// After
import { createRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = createRoot(container);
root.render(<App />);
The React.createRoot
反応18で実行しているルートを作成します.そして、それは反応18の改善の全てを加えて、あなたに並行した特徴を使うことができます.これはルートAPIが前進します.以上です.他のコードを変更する必要はありません🥳.
👉並行性
これは反応18で追加された最も重要な概念です.同時実行は機能ではありません、それは実装の詳細です.それは緊急更新プログラムの更新を優先順位付けに役立ちますので、緊急時の更新/ブロック更新/緊急時に優先順位を付けることができます.
並行した反応の重要な特性は、レンダリングが中断可能であるということです.反応は、常に、単一の、中断された、同期トランザクションで、彼らが引き起こされた順序ですべての状態アップデートを処理します.この同時性概念の追加で、あなたは、特定の状態更新が他のものより低い優先順位を持っているという反応を伝えることができます、そして、反応はより高い優先順位で他の州更新を扱います.
あなたは、状態が反応18で新しく導入される新しいAPIのうちの1つを使用してより低いプライオリティーを持つと反応することができます
useTransition
and startTransition
👉UseTransitionとstartTransition
useTransition
and startTransition
いくつかの状態の更新プログラムをマークしない緊急です.他の州の更新はデフォルトで緊急と見なされます.例えば
緊急状態の更新-テキストの入力を更新
非緊急状態の更新-検索結果のリストをレンダリングする
利用変遷
変遷
useTransition
クラスコンポーネントなど、利用できません.useTransition
フック.ユーザーの検索中にパフォーマンスの違いに気づくでしょう.最初の例では、入力ボックスに入力している間、少しの遅れに気がつきます.これは、反応がフィルタリングされたリスト州更新を待っていて、入力ボックスの状態を更新しているからです.
そして、2番目の例では、リストの更新状態を低優先度に保つように反応している.
優先順位付けなしで
startTransition
代わりに、UIパフォーマンスを高めるために利用できる他の解決策がない場合にのみ使用します.使用例
それは、新しく更新された状態が準備ができるまで、古い状態を示すように反応するように指示します.これは
statrTransition()
ただし、状態の更新を完全に制御できない場所で使用できます.たとえば、親コンポーネントから子コンポーネントに渡された状態です.これを使用するには、単に内部変数useDeffedValue()
, それから、あなたの子要素は、更新された値が利用できるまで、古い状態を得ます. const userList = useDeferredValue(props.list);
👉図書館用の新しいフック
反応18はいくつかのフックを導入しました.
Note: These hooks are intended to be used by libraries, not application code. As an application developer you will probably ever use these hooks.
👉自動バッチ処理
自動バッチは、1つの状態更新として実行されるように一緒に複数の状態の更新をグループ化することができます.これは、より良いパフォーマンスのための単一の再レンダリングになります.
バッティングは既に反応の古いバージョンで存在していたが、イベントハンドラだけを反応させるために制限されました.たとえば、あなたが同じClickイベントの中で2つの州更新をするならば、反応は常に1つの再表示にこれらを打った.次のコードを実行すると、クリックするたびに、2度の状態を設定しますが、単一のレンダリングを実行するだけです
自動バッティング反応18では、現在の状態の約束、SetTimeout、ネイティブイベントハンドラ、またはデフォルトで反応してバッティングされていない他のイベントのバッティングをサポートしています.下記の例を見てください.
私はバッチしたくない場合はどうですか?
通常、バッティングは安全ですが、いくつかのコードは、状態変化の直後にDOMから何かを読むことに依存するかもしれません.これらのユースケースの場合は、
ReactDOM.flushSync()
バッティングを選ぶ import { flushSync } from 'react-dom'; // Note: react-dom, not react
function handleClick() {
flushSync(() => {
setCounter(c => c + 1);
});
// React has updated the DOM by now
flushSync(() => {
setFlag(f => !f);
});
// React has updated the DOM by now
}
👉新しいサスペンス機能
サスペンスコンポーネントは、古いバージョンの反応に既に存在します.しかし、唯一のサポートユースケースは、コードを使用して分割分割された.怠惰で、サーバー上でレンダリングするとき、まったくサポートされませんでした.サスペンスコンポーネントを使用して、別のコンポーネントがコンポーネントのレンダリング、つまり怠惰な読み込みに準備されるまで、フォールバックコンポーネントを表示している必要があります.
<Suspense fallback={<Spinner />}>
<LaziComponent />
</Suspense>
Response 18は、サーバー側のレンダリングのためにサスペンス動作を可能にします、そして、近い将来データ取り込みの場合.👉サーバーコンポーネント
しかし、これらはまだ研究開発段階にあります.これらのコンポーネントは、サーバー上で特定のサーバー側のみのロジックを実行できるようにレンダリングするものです.これは、クライアント上で実行してはならないサーバー上のタスクを実行するために使用されます.
これは実験的な機能であり、あなたのアプリケーションで使用する準備ができていません.これは近い将来リリースされる予定です.詳細は入手可能ですhere .
Reference
この問題について(何が反応18で新しいですか?), 我々は、より多くの情報をここで見つけました https://dev.to/rishikeshvedpathak/whats-new-in-react-18-5npテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol