Open3
Reactのpropsを分割代入する理由をまとめる
自分は分割代入する派。
その理由を並べていく。
理由
不使用プロパティに気づきやすくなる
export const SampleButton = ({
onClick,
// onUpdate を使っていないのが不使用変数として検出できる
onUpdate,
}: {
onClick: () => void;
onUpdate: () => void;
}) => {
return <button onClick={onClick}>SampleButton</button>;
};
ただし、 props
で渡す場合でも、 react/no-unused-prop-types
ルールで検出できる。
コード
// onUpdate を使っていない
export const SampleButton = (props: { onClick: () => void; onUpdate: () => void }) => {
return <button onClick={props.onClick}>SampleButton</button>;
};
デフォルト値を設定できる
オプショナルにしたpropsのデフォルト値を設定できる。
これにより、undefined時の処理を明示できる。
const SampleButton = ({ isDisabled = false }: { isDisabled?: boolean }) => {
return <button disabled={isDisabled}>sample</button>;
};
記述量がコードスメルになる
分割代入が面倒なくらいプロパティが多くなってきたら、それはコンポーネントの分割が適切にできていない合図。
"use client" すべきでないのを教えてくれる
"use client"
は Server Component と Client Component の境界に設定するべきディレクティブです。
このへんの説明は以下の記事が詳しいので割愛します。
分割代入しておくと、 "use client"
しているコンポーネントのpropsで関数を受け取っているとTypeScriptの警告が出ます。
この場合は "use client"
を外すべきです(親が "use client"
されているべき)。
"use client";
export const SampleButton = ({ onClick }: { onClick: () => void }) => {
return <button onClick={onClick}>SampleButton</button>;
};
props
で使った場合には何も教えてくれない。
"use client";
export const SampleButton = (props: { onClick: () => void }) => {
return <button onClick={props.onClick}>SampleButton</button>;
};
ESLintルールとか
react/destructuring-assignment
というルールで分割代入を強制できる。