🔖

【React】コンポーネント化とProps

に公開

Reactでよくあるpropsの記述

外部コンポーネントとProps

App.jsx

import ( Message ) from './components/Message'; // コンポーネントを記述するとコードエディタで自動生成(外部化したjsxをimportする記述)がされることも多い

export const App = () => {
    // 下記のようなスタイルをコンポーネント化
    // const contentStyleA = {
        // color: orange,
        // fontSize: '24px';, // jsではハイフンを省略したキャメルケース
    // };

    return (
        // html in jsでは{}でjsを記述
        // <>
        //     <p style={contentStyleA}>How's it going?</p>
        //     <p style={contentStyleB}>Pretty good!</p>
        // </>
            
        // 外部化したコンポーネント。任意の名前でProps(オブジェクト)を渡すことができる
        <>
            <Message color='orange' message='How's it going?' />
            <Message color='green' message='Pretty good!' />
        </>
    );
};

components/Message.jsx

export const Message = (props) => { // 任意の引数(わかりやすくpropsで良さそう)
    const contentStyle = {
        color: props.color, // propsで渡されたcolor
        fontSize: '24px';,
    };

    return <p style={contentStyle}>{props.message}</p>; // propsで渡されたmessage
};

タグで囲んでpropsを渡す

App.jsx

import ( Message ) from './components/Message';

export const App = () => {
    return (
        <>
            <Message color='orange'>How's it going?</ Message> // タグで囲んでpropsを渡す
            <Message color='green'>Pretty good!</ Message>
        </>
    );
};

components/Message.jsx

export const Message = (props) => {
    const contentStyle = {
        color: props.color,
        fontSize: '24px';,
    };

    return <p style={contentStyle}>{props.children}</p>; //タグで囲んだものは.childrenで受け取るように決まっている
};

propsの分割代入、オブジェクトの省略

components/Message.jsx

export const Message = (props) => {
    const { color, children } = props; // 分割代入
    const contentStyle = {
        color, // 分割代入したのでprops.を省略。さらに、プロパティ名と値が同名になるのでオブジェクトの省略記法が使える
        fontSize: '24px';,
    };

    return <p style={contentStyle}>{children}</p>; // 分割代入したのでprops.を省略
};

引数の時点でpropsの分割代入

components/Message.jsx

export const Message = ({ color, children }) => { // 引数の時点で分割代入
    const contentStyle = {
        color,
        fontSize: '24px';,
    };

    return <p style={contentStyle}>{children}</p>;
};

Discussion