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

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

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

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

Q&A

1回答

1056閲覧

react-hook-formで value.XXX の XXX を変数で表記したい

07290729

総合スコア15

React.js

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

0グッド

1クリップ

投稿2020/07/09 06:36

編集2020/07/09 14:13

react-hook-formを使ったForm内で入力した値を使って
getValueした値をもとに条件付きrenderを実行するコードを作成中ですが
掲題のような記述ができずに苦戦しています。
目的は、配列でIDのような数値が振られていて
その数値ごとに条件チェックを行うようにすることです。
XXXの部分が変数になった場合に
values.hensu などとしても、ただの文字列になってしまいます・・・。
(hensu にセットされる文字列を直接記載して values.XXX とすると、値は正確に取れている状態です)

お分かりになる方がいらっしゃいましたら、ご教授お願いしますm

  • Sample1
import React, {useState} from 'react'; import { useForm } from "react-hook-form"; import { Grid } from '@material-ui/core'; import './address.css'; import Phone from './Phone'; function Address() { const {register, handleSubmit, getValues} = useForm(); const [addresses, setAddresses] = useState(["address0"]); const [isPhone, setIsPhone] = useState([false]) function addAddress() { const newAddresses = [...addresses]; console.log("before", newAddresses, addresses, `address.${addresses.length}`); newAddresses.push(`address.${addresses.length}`); setAddresses(newAddresses); console.log(newAddresses, addresses, `address.${addresses.length}`); }; function removeAddress(index) { if (addresses.length > 1) { const newAddresses = [...addresses]; console.log("target", index); newAddresses.splice(index, 1); for (var i = index; i < newAddresses.length; i++) { newAddresses[i] = `address.${i}`; } setAddresses(newAddresses); console.log(newAddresses, addresses, `address.${addresses.length}`); } } function setPhone(index) { const newPhone = [...isPhone]; newPhone[index] = true; setIsPhone(newPhone); } return ( <form onSubmit={handleSubmit()}> <h3>Address</h3> <button type="button" onClick={addAddress}> Add Address </button> {addresses.map((address, index) => { return ( <div key={address}> <fieldset className="fieldset" name={address}> <Grid container> <Grid item xs={4}> Address </Grid> <Grid item> <input type="text" name={address} size="40" ref={register} /> </Grid> </Grid> <Grid container> <Grid item xs={4}> Phone1 (Home) </Grid> <Grid item xs={4}> <input type="checkbox" name={`${address}_phone1`} ref={register} /> </Grid> </Grid> <Grid container> <Grid item xs={4}> Phone2 (Mobile) </Grid> <Grid item xs={4}> <input type="checkbox" name={`${address}_phone2`} ref={register} /> </Grid> </Grid> <button onClick={() => setPhone(index)}>add Phone Info</button> {isPhone[index] && <Phone register={register} values={getValues} address={`address${index}`} /> } </fieldset> <button type="button" onClick={() => removeAddress(index)}> - </button> </div> ) })} </form> ) } export default Address;
  • Sample2
import React from 'react'; import "./input.css"; import { Grid } from '@material-ui/core'; const Phone = ({ register, watch, values, address }) => { const address_phone1 = `values.${address}_phone1`; const address_phone2 = `values.${address}_phone2`; console.log("phone1:", address, "value1: ", address_phone1, "value2: ", address_phone2); return ( <div> <fieldset> <h3>Phone Info {address}</h3> {address_phone1 && <Grid container> <Grid item xs={4}> Phone1 </Grid> <Grid item> <input type="text" name={`${address}_phone1_number`} size="15" defaultValue="03-XXXX-XXXX" ref={register} /> </Grid> </Grid> } {address_phone2 && <Grid container> <Grid item xs={4}> Phone2 </Grid> <Grid item> <input type="text" name={`${address}_phone2_number`} size="15" defaultValue="090-XXXX-XXXX" ref={register} /> </Grid> </Grid> } </fieldset> </div> ) } export default Phone;

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

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

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

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

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

guest

回答1

0

えっと、value[hensu]ということでしょうか?

投稿2020/07/09 06:40

maisumakun

総合スコア146018

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

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

maisumakun

2020/07/09 07:44

もう少し、質問内容をコードで書いてもらえませんでしょうか?
07290729

2020/07/09 07:48

内容がふわっとしていてすみません、、、当該箇所のコードをご提示しますので お待ちいただければと、、、
07290729

2020/07/09 14:14

maisumakun さん コード追加しましたのでご確認お願いします。 目的は、checkbox でチェックのついた情報だけ入力欄が表示されるようなフォームを作ることですm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問