あなたが反応18について知っている必要があるすべて


ReactJSは非常にオープンソースのJavaScriptライブラリを構築する動的なウェブサイトを簡単になります.このブログの記事は主に反応の最新バージョンで最新の変更に焦点を当てています.反応の基礎知識とその基礎は、それを最大限に理解するために必要です.

クライアント側の更新


ものは、新しいバージョンをサポートするために更新します.
反応17から18までの更新はどんな変化も含みません.
  • インストールパッケージnpm install react@18 react-dom@18
  • reactdom.RAIDはもはや反応18でサポートされません.代わりに新しいcreateroot APIを使用してください.
  • 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


    (アプリケーション開発者として、これらを必要としないかもしれません)
    のような
  • 店
- 外部ストアが同時読み込みをサポートできる新しいフックです.
  • useInsertionEffect - JSをJSライブラリで使用できる新しいフックです.
  • useid -コンポーネントのユニークなIDを生成する新しいフックです.設計システム
  • に有用

    結論


    これらの新機能は、ウェブサイトをより速く、良いユーザー体験を与え、パフォーマンスを主にSSRで最適化します.
    物事は、今後のバージョンで楽しみにして
  • は、手動でフォールバックコンポーネントをレンダリングするデータフェッチをサポートしています.
  • サーバーコンポーネント(アルファステージ)サーバー側での反応コンポーネントを使用します.