あなたが反応18について知っている必要があるすべて
6687 ワード
ReactJSは非常にオープンソースのJavaScriptライブラリを構築する動的なウェブサイトを簡単になります.このブログの記事は主に反応の最新バージョンで最新の変更に焦点を当てています.反応の基礎知識とその基礎は、それを最大限に理解するために必要です.
ものは、新しいバージョンをサポートするために更新します.
反応17から18までの更新はどんな変化も含みません.インストールパッケージ reactdom.RAIDはもはや反応18でサポートされません.代わりに新しいcreateroot APIを使用してください.
レンダリングコールバック の変更
レンダリングコールバックは、新しいルートAPIから削除されます.でも
ルートコンポーネントへのプロパティーとして渡すことができます.
反応のDOM/サーバーAPIのサスペンスをサポートし、サーバー側のページをストリーミングするいくつかの更新プログラムがあります改善
店
- 外部ストアが同時読み込みをサポートできる新しいフックです. useInsertionEffect - JSをJSライブラリで使用できる新しいフックです. useid -コンポーネントのユニークなIDを生成する新しいフックです.設計システム に有用
これらの新機能は、ウェブサイトをより速く、良いユーザー体験を与え、パフォーマンスを主にSSRで最適化します.
物事は、今後のバージョンで楽しみにしては、手動でフォールバックコンポーネントをレンダリングするデータフェッチをサポートしています. サーバーコンポーネント(アルファステージ)サーバー側での反応コンポーネントを使用します.
クライアント側の更新
ものは、新しいバージョンをサポートするために更新します.
反応17から18までの更新はどんな変化も含みません.
npm install react@18 react-dom@18
reactDOM.render(<App />,document.getElementById(‘root’));
import ReactDOM from 'react-dom/client';
import App from './App';
const root =
ReactDOM.createRoot(document.getElementById('root');
root.render(</App>);
レンダリングコールバック
レンダリングコールバックは、新しいルートAPIから削除されます.でも
ルートコンポーネントへのプロパティーとして渡すことができます.
root.render(</App callback={() => console.log("rendered")}>);
サーバ側の更新
反応のDOM/サーバーAPIのサスペンスをサポートし、サーバー側のページをストリーミングするいくつかの更新プログラムがあります
renderToString(React.Node)
renderToPipeableStream(React.Node, options)
改善
1 .非同期呼び出しの自動バッティングサポート
どのようなバッチですか?
複数のsetstate呼び出しは一緒に結合して、それから一度だけ再描画します.
なぜそれが必要ですか?
より良いパフォーマンスのためのより少ない再レンダリング.
このアップデートの前に、自動バッチ処理は、反応イベントハンドラですべての州アップデートに適用されました.しかし、更新後、それは同様にasync関数をサポートします.
以下のスニペットでは、再レンダリングが起こるでしょう.しかし、アップデートでは、グループと再一度だけレンダリングします.
fetch('/someapi').then() => {
setIsFetching(false);
setError(null);
setFormStatus('success')
});
我々は自動バッチを選ぶことができますか?
はい.通常、バッティングは安全です、しかし、若干のコードは状態変化の直後にDOMから何かを読んでいるかもしれません.これらのユースケースでは、RachreCamdomを使用できます.flushsync ()ではバッチ処理を選択します.
import { flushSync } from ‘react-dom’;
flushSync(() => {
// wraps state updates
});
サーバ側レンダリング( SSR )のサスペンスサポート
何がSSRですか?
テクニックは、あなたの反応コンポーネントのHTML出力をレンダリングし、サーバーからHTMLを送信しました.ユーザーがJavaScriptのバンドルが読み込まれている間に見て、それが対話的になる前に、いくつかのUIを持っているようにします.
サスペンスとは
サスペンスは、コンポーネントが準備できるまで、プレースホルダ/フォールバックコンポーネントを表示する概念です.
<Suspense fallback={<Loader/>} >
<Component />
</Suspense >
V 18の前に、サスペンスはクライアント側に限って16.6 v(2018)で反応に導入されました.サーバー側では、パフォーマンスに影響を与えるすべてのまたは何も、ユーザーにレンダリングされます.
v 18の後、それは速くウェブサイトを提出して、初期のロード時間を改善するサポートを提供します.
並行処理
並行性とは何か
単に進行中のタスクを中断することを意味します.
我々は、更新は、より緊急ではなく、遅延することができます反応を伝えることができます.
緊急状態の更新は、優先順位の更新より優先順位を付けることができます.
彼らが引き起こされた以前の状態更新順序.
V 18では、新しいAPIのコンカレント機能と呼ばれる優先度を変更できます.
1 . useTransition ()
機能性部品で使用される
.
2つの連続した状態更新があるならば、アップデートのどれでも高価であるならば、それはUIのレンダリングをブロックするかもしれません.それで、UseTransitionでそれらを包むことによって状態アップデートの優先順位を下げることができます
const [isPending, startTransition] = useTransition();
setInputValue(value);
startTransition(() => {
//less priority
setResult(results);
});
...
return (isPending && <Spinner />);
2 ) UseDeferredValues ()
-
新しい値が準備されるまで、以前の値を示すために、反応を教えてください
StartTransitionに似ていますが、状態更新を完全に制御しない場合には使用できません.たぶん、最新の更新プログラムは、他のサードパーティのライブラリで起こっているだけで更新値があります.const deferredVal = useDeferredValue(stateValue)
ライブラリ開発者向けの新しいAPI
(アプリケーション開発者として、これらを必要としないかもしれません)
のような
fetch('/someapi').then() => {
setIsFetching(false);
setError(null);
setFormStatus('success')
});
import { flushSync } from ‘react-dom’;
flushSync(() => {
// wraps state updates
});
<Suspense fallback={<Loader/>} >
<Component />
</Suspense >
const [isPending, startTransition] = useTransition();
setInputValue(value);
startTransition(() => {
//less priority
setResult(results);
});
...
return (isPending && <Spinner />);
結論
これらの新機能は、ウェブサイトをより速く、良いユーザー体験を与え、パフォーマンスを主にSSRで最適化します.
物事は、今後のバージョンで楽しみにして
Reference
この問題について(あなたが反応18について知っている必要があるすべて), 我々は、より多くの情報をここで見つけました https://dev.to/monicaacha2103/all-you-need-to-know-about-react-18-dbcテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol