前提・実現したいこと
少々複雑になってしまいましたが、タイトル通りのことを実装したいです。
元のプログラムはごちゃごちゃしているため、該当する部分の最小限のコードを載せています。
現在は、親コンポーネント内でuseStateを使い、子コンポーネントにstateを付与することで値を管理しようとしていましたが、動的に追加されたコンポーネントにstateを振ることが困難だと感じ、相談するに至りました。
最終的には、logをクリックした際に、以下のようにそれぞれのコンポーネントで入力した値を1つのリストにまとめたものが出力されれば満足です。(リストの要素は動的に増える)
質問等ありましたら随時補足していきますので、どなたか回答よろしくお願いします。
[追記]
やりたいこととしては
・子コンポーネントでinputタグを作成
・親側では動的にの子コンポーネントを増やすことができる
・親側で子コンポーネントで入力された値を取得できる
言ってしまえば、子から親への値の受け渡しに近いのかもしれません。
List = [ { param1: "aaaa", param2: "bbbb", }, { param1: "cccc", param2: "dddd", }, { param1: "eeee", param2: "ffff", }, ]
該当のソースコード
Parent.jsx
Javascript
1export const Parent = () => { 2 const [list, setList] = useState([]); 3 4 const onClick = () => { 5 const newList = [ 6 ...list, 7 { 8 param1: "", // この値を子コンポーネントで埋めたい 9 param2: "", // この値を子コンポーネントで埋めたい 10 }, 11 ]; 12 setList(newList); 13 }; 14 15 const onClickLog = () => { 16 console.log(list) 17 } 18 19 return ( 20 <> 21 {list.map((item, idx) => { 22 // この辺をどう変更すべきかがわからない 23 return <Children key={idx} item={item} />; 24 })} 25 <button onClick={onClick}>追加</button> 26 <button onClick={onClickLog}>log</button> 27 </> 28 ); 29};
Children.jsx
JavaScript
1// このpropsにparam1, param2をセットしたい 2export const Children = (props) => { 3 const [param1, setParam1] = useState(""); 4 const [param2, setParam2] = useState(""); 5 6 const onChange1 = (e) => { 7 setParam1(e.target.value); 8 }; 9 const onChange2 = (e) => { 10 setParam2(e.target.value); 11 }; 12 13 return ( 14 <> 15 <input value={param1} onChange={onChange1} /> 16 <input value={param2} onChange={onChange2} /> 17 </> 18 ); 19};
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/06 00:33
2021/07/06 00:45
2021/07/06 00:55