React Hooksを利用した場合での、子コンポーネントから親コンポーネントのstateを変更する方法をご教示いただけないでしょうか。
動作はしませんがご回答いただける場合の参考になるかと思い、下記にサンプルを用意いたしました。
よろしければご参照ください。
サンプル
ソースコード
index.js
js
1import React, { useState } from "react"; 2import ReactDOM from "react-dom"; 3import Buttons from "./Buttons"; 4 5const Test = () => { 6 const [count /* , setCount */] = useState(0); 7 8 return ( 9 <React.Fragment> 10 <p>{count}</p> 11 <Buttons /> 12 </React.Fragment> 13 ); 14}; 15 16const rootElement = document.getElementById("root"); 17ReactDOM.render(<Test />, rootElement);
Buttons.jsx
jsx
1import React/* , { useState } */ from "react"; 2 3const Buttons = () => { 4 return ( 5 <React.Fragment> 6 <button>+ 1</button> 7 <button>- 1</button> 8 </React.Fragment> 9 ); 10}; 11 12export default Buttons; 13
コンポーネントを切り分けない場合
Buttonsコンポーネントを作らずindex.jsのみで完結させる場合におけるstateの変更はできました。
js
1import React, { useState } from "react"; 2import ReactDOM from "react-dom"; 3 4function Test() { 5 const [count, setCount] = useState(0); 6 7 return ( 8 <> 9 <p>{count}</p> 10 <button onClick={() => setCount(count + 1)}> 11 +1 12 </button> 13 <button onClick={() => setCount(count - 1)}> 14 -1 15 </button> 16 </> 17 ); 18} 19 20const rootElement = document.getElementById("root"); 21ReactDOM.render(<Test />, rootElement);
しかし、可読性やメンテナンス性を上げるために、できるだけコンポーネントを切り分けたいと考えています。
また、stateの配置を親コンポーネント、stateの変更は子コンポーネントにするという発想は、React公式ドキュメントの下記ページを参考にしています。
Step 4: state をどこに配置するべきなのかを明確にする
上記ページの次の項↓
Step 5: 逆方向のデータフローを追加する
で、子から親にあるstateの変更方法が書かれていますが、実装例がHooksを利用していないため、Hooksを利用した場合の方法を知りたいと思い質問した次第です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。