Reactコンポーネントでも親子関係を持つと考えられる
<Parent> <ChildOne /> <ChildTwo> <Baby /> </ChildTwo> </Parent>
props: 親から子へ渡される属性値 ※子コンポーネントで変更できない
state: 子の内部状態 ※親コンポーネントから参照・変更できない
L stateが更新されるとstateを持つコンポーネントが再レンダリングされる
### props
外部から渡される属性値は、propsと呼ぶ
<Component string="this is string" number={123} bool={true} array={[9,8,7]} object={{ hello: 'world'}} func = {a=> a*2} variable={something} /> <button id="the-button" className="button is-primary" onClick={handleClick} >Button</button> <label htmlFor="the-id">Label</label> <input type="text" id="email" arial-labelledby="the-label" aria-required="true" />
### イベント処理
イベントの処理は別に書く
const handleClick = () => { } const button = <button onClick={handleClick}>Click me</button>;
### カスタム属性
独自要素には自由にpropsを定義できる
<Component customProp={something} /> <Layout header={<Header />} content={<Content />} footer={<Footer />} /> <Panel narrow>...</Panel>
### state
コンポーネント内部でデータを管理したい場合は、useState関数(state)を使う
L useStateは更新されたデータを覚えていて、2回目以降はそちらを使う
function CountButton(){ const countState = React.useState(0); const count = countState[0]; // 状態 const setCount = countState[1]; // 状態を更新するための関数 const handleClick = () => setCount(count + 1); return <button onClick={handleClick}>{count}</button>; } const root = document.getElementById('root'); ReactDOM.render(<CountButton />, root);
stateによる更新の影響範囲を確認
function Parent(){ const [num, setNum] = React.useState(0); const handleClick = () => setNum(num + 1); return( <> <p><button onClick={handleClick}>{num}</button></p> <p><Child num={num} /></p> <p><Child num={num} /></p> </> ); } function Child({ num }){ const [myNum, setMyNum] = React.useState(0); const handleClick = () => setMyNum(myNum + 1); return ( <button className="child" onClick={handleClick}> {num + myNum} </button> ); }
### フック
フックはReactの便利な機能を導入できるヘルパー関数
useStateはフックの一つ
なるほど、propsだけでなくuseStateを使って開発していくのね。
なんとなくイメージが沸きました。