state と onChange でstateを更新する
L useStateで初期値を設定している
function App(){ const [name, setName] = React.useState('Jhon'); const handleChange = e => setName(e.target.value); return( <> <h1>Hello, {name}</h1> <input value={name} onChange={handleChange} /> </> ); }
textareaもinputと同じ
<textarea value={val} onChange={handleChange} />
– radioボタンを使う場合
function App(){ const [val, setVal] = React.useState('cat'); const handleChange = e => setVal(e.target.value); return( <> <label> <input type="radio" value="cat" onChange={handleChange} checked={val == 'cat'} /> 猫 </label> <label> <input type="radio" value="dog" onChange={handleChange} checked={val == 'dog'} /> 犬 </label> <p>Your Choice: {val}</p> </> ); }
– checkbox
L 配列の場合はuseStateのところで[”]とする
L stateは変更できず、val.push(e.target.value)とはできない
function App(){ const [val, setVal] = React.useState(['js']); const handleChange = e => { if(val.includes(e.target.value)){ setVal(val.filter(item => item !== e.target.value)); } else { setVal([...val, e.target.value]); } }; return( <> <label> <input type="checkbox" value="js" onChange={handleChange} checked={val.includes('js')} /> JavaScript </label> <label> <input type="checkbox" value="python" onChange={handleChange} checked={val.includes('python')} /> Python </label> <label> <input type="checkbox" value="java" onChange={handleChange} checked={val.includes('java')} /> Java </label> <p>Your Choice: {val.join(', ')}</p> </> ); }
以下のように書くこともできる
const initialVal = {js: true, python: false, java: false}; const [val, setVal] = React.useState(initialVal); const handleChange = e => { const newVal = Object.assign({}, val, { [e.target.value] : !val[e.target.value] }); setVal(newVal); };
– select box
L onChangeとするところなどほぼ同じですね
function App(){ const [val, setVal] = React.useState('react'); const handleChange = e => setVal(e.target.value); return( <> <select value={val} onChange={handleChange}> <option value="react">React</option> <option value="vue">Vue.js</option> <option value="angular">Angular</option> </select> <p>Your Choice:{val}</p> </> ); }
– コンポーネントのイベント処理
function Tab({ onChange }){ return ( <ul> <li onClick={()=> onChange(1)}>React</li> <li onClick={()=> onChange(2)}>Vue.js</li> <li onClick={()=> onChange(3)}>Angular</li> </ul> ); } function App(){ const [tab, setTab] = React.useState(1); const handleChange = val => setTab(value); return( <> <Tab onChange={handleChange} /> <div hidden={tab !== 1}> A JavaScript library for building user interfaces </div> <div hidden={tab !== 2}> The Progressive JavaScript Framework </div> <div hidden={tab !== 3}> One framework. Mobile & desktop. </div> </> ); }
React.useState()の使い方は何となくわかってきたのう