py-py’s blog

何か書くよ

Reactメモ

propsについて、ページ側(親)で各コンポーネント(子)にプロパティなどを渡している

app.js

import React, {Component} from 'react';

const App = () => {
    const profiles = [
        {
            name: "tarou",
            favorite: "game",
            job: "student",
            score: 80,
        },
        {
            name: "hanako",
            favorite: "cooking2,
            job: "no job",
        },
    ]

    return <div>
        {
            profiles.map((profile) => { // 各項目をmap()で回す
                return <User name={ profile.name }  // profileの値をUserコンポーネントへ渡す
                             age={ profile.age }
                             job={ profile.job}
                />
            })
        }
    </div>
}

const User = (props) => { // propsでUserコンポーネントへ渡された値を取得操作する
    return <div>HI! I am {props.name} ! and my favorite is {props.favorite} years old! and my job is {props.job}</div>
}

// 以下の記述でデフォルト設定を設定することが可能
User.defaultProps = {
    age: 1,
    favorite: "no",
    job : "no job",
    score: 80,
}

// 以下の記述でタイプの指定や条件(一種のバリデーション)が設定できる
User.propTypes = {
    name: PropTypes.string, // nameは文字列指定
    score : PropTypes.number.isRequired, // ageは数字型で必ず必要
}

export default App;

stateとは、propsとは違い、各コンポーネントの中でのみ使用する状態のこと。
propsは変更不可能だが、stateは変更可能。

クラスコンポーネントで状態管理
コンポーネントの管理を行うのはsetState({})で行うことができる
また、setState()が実行されるたびにrender()が実行され画面が再描写される。

App.js

import React, {Component} from 'react';

const App = () => {
    return (
        <div>
            <Counter/>
        </div>
    )
}

class Counter extends Component  {
    // constructorは親の要素を受け取り、それをpropsで扱うことができる
    constructor(props) {
        super(props);
        this.state = {count: 0}
    }

    handlePlusButton = () => {
        // 状態管理を扱う際の関数
        this.setState({count :this.state.count + 1})
    }

    handleMinuxButton = () => {
        this.setState({count: this.state.count - 1})
    }

    render() {
        console.log(this.state)
        return (
            <React.Fragment>
                <div>count: {this.state.count}</div>
                <button onClick={this.handlePlusButton}>+1</button>
                <button onClick={this.handleMinuxButton}>-1</button>
            </React.Fragment>
        )
    }
}

export default App;