質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2879閲覧

Reactで複数Formを作成した際に、radioButtonを変更すると一番上の要素が変更される

te_ff

総合スコア13

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/04/07 03:47

編集2021/04/07 04:43

前提・実現したいこと

Reactでラジオボタンを持った複数のフォームをmapで表示しているのですが、二つ目以降のラジオボタンの値を変更しても、一つ目のラジオボタンの値が変更されます。
どのようにすれば対応できますでしょうか?

該当のソースコード

React.js

1[親コンポーネント] 2... 3 const renderTagContent = () => { 4 return video.map( 5 v => v.tags.map( t => 6 <TagContent 7 key={t.id} 8 {...t} /> 9 ) 10 ) 11 } 12 13 return( 14 { renderTagContent() } 15 ) 16...

React.js

1[子コンポーネント(Form)] 2... 3 const initialState = { 4 'action_type': props.action_type, 5 } 6 7 const [tag, setTag] = useState(initialState); 8 9 const handleChange = (e) => { 10 const value = e.target.value; 11 setTag({ 12 ...tag, 13 [e.target.name]: value 14 }); 15 } 16 17 return( 18 <div> 19 <label htmlFor="a">a</label> 20 <input id="a" type='radio' name='action_type' value='a' checked={ tag.action_type === 'a' } onChange={ (e) => handleChange(e) } /> 21 <label htmlFor="b">b</label> 22 <input id="b" type='radio' name='action_type' value='b' checked={ tag.action_type === 'b' } onChange={ (e) => handleChange(e) } /> 23 <label htmlFor="c">c</label> 24 <input id="c" type='radio' name='action_type' value='c' checked={ tag.action_type === 'c' } onChange={ (e) => handleChange(e) } /> 25 </div> 26 ) 27...

###追記

JSON

1videoの中身 2[ 3 { 4 id: 'id', 5 tags: [ 6 { 7 id: 'id', 8 action_type: '' //a or b or c 9 }, 10 { 11 id: 'id', 12 action_type: '' //a or b or c 13 } 14 ] 15 }, 16 { 17 id: 'id', 18 tags: [ 19 { 20 id: 'id', 21 action_type: '' //a or b or c 22 } 23 ] 24 }, 25]

タグコンテント内に親コンポーネントから引き継いだ情報をstateで管理し、それぞれのhandleChange関数でstateを変更しています。
確認してみると、handleChange関数がラジオボタンの時のみ一つ目の物しか動いていないようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/04/07 03:54

情報が少なすぎます。「videoはどのように管理しているのか」や「TagContentから変更をどのように伝えているのか」など、わからないことだらけです。
te_ff

2021/04/07 04:11

ありがとうございます。 情報追記いたしました。 ご確認いただければ幸いです
hoshi-takanori

2021/04/08 00:43

コンポーネントの関数宣言部分を略す意味が分かりませんが、たぶん原因は React 以前の HTML 的な問題で、id が被ってたり、input type='radio' の name='action_type' が全部同じなので、同じグループになってたりしますね。
guest

回答1

0

自己解決

原因は React 以前の HTML 的な問題で、id が被ってたり、input type='radio' の name='action_type' が全部同じなので、同じグループになってたりしますね。

それぞれのinput/labelにprops.idを付与することにより対応できました。

投稿2021/04/08 02:20

te_ff

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問