このページ内容は2022年9月9日以降、再調査・再検証してません。実際に扱う際は最新の情報にアクセスしてください。
ついにReact 18が正式リリースされました。自動バッチ処理、Transitions, Suspenseのサーバーレンダリング対応など面白い機能が多く追加されましたreact18。
また、厳密には別ものだと思いますが、Vue.jsにおけるKeepAlive配下のv-ifのような、stateの状態を保持したままUIの一部を追加・削除できる <Offscreen>
コンポーネントが追加される予定ですreact18_offscreen。
この影響で、strictモードではコンポーネントをマウント -> アンマウント -> (同じstateを使い) マウントするようになりますreact18_strict_mode。このため、useEffectが2回実行 (発火 -> クリーンアップ関数実行 -> 発火) されたりと挙動が変わりました。この辺りの話はWEB+DB PRESS Vol.129の「Reactの深層」というコラムが非常に詳しいので、おすすめですwdpress。
その他にも、React18になったことで、型定義の方も更新され、FCでの暗黙的なchildrenの継承が削除されました。
1import * as React from 'react';23const Input: React.FC = ({ children }) => <div>{children}</div>;4// ^^^^^^^^ will error with "Property 'children'5// does not exist on type '{}'.6<Input>children</Input>;
以下のように型を明示的に書いてあげる必要があります。
1import * as React from 'react';23interface InputProps {4type: string;5}67const Input: React.FC<InputProps> = ({ type }) => <input type={type} />89<Input type="search" />