0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React】event属性を受け取る。

Posted at

オブジェクト形式の複数の値を受け取る方法。【自分用メモ】

React勉強中のため、間違っていたらご指摘ください。

Login画面を想定

まずは全体像


import axiosInstance from "../../axios";
import React, {useState} from "react";

const Login = () => {
    
   //受け取る初期値
    const initInput = {
        email: '',
        password: ''
    }
    //useStateで初期値を代入
    const [state, setState] = useState(initInput)
    
        //入力されたときに発火される。
        const HandleChange = (e) => {
                //入力された値を受け取る。
        const value = e.target.value
                //入力フォームが複数あるため、e.target.nameでインプット要素のname属性を受け取る。
        const name = e.target.name
                
                //スプレッド演算子で要素を分解し、取得したname属性を割り当ててフォームの区別をしている。
        setState({...state, [name]: value})
        console.log(state)
    }
    const HandleLogin = async () => {
       const result = await axiosInstance.post('auth/jwt/create/', state)
        console.log(result)
    }

    return (
        <>
            <form action="">
                <label htmlFor="email">email</label>
                  <input id="email" name="email" type="email" value={state.email} onChange={HandleChange} />
                 <label htmlFor="password">password</label>
                  <input id="password"  name="password" type="password"  value={state.password} onChange={HandleChange} />
                <button onClick={HandleLogin}>ログイン</button>
            </form>

        </>
    )
}

export default Login

ポイント

  1. 入力フォームごとにuseStateを設定することもできるけど、コードが多くなるので行けてない。
  2. e.target.nameで入力されたname属性ごとにsetStateに渡せるとスッキリする。
        //入力されたときに発火される。
        const HandleChange = (e) => {
                //入力された値を受け取る。
        const value = e.target.value
                //入力フォームが複数あるため、e.target.nameでインプット要素のname属性を受け取る。
        const name = e.target.name
                
                //スプレッド演算子で要素を分解し、取得したname属性を割り当ててフォームの区別をしている。
        setState({...state, [name]: value})
        console.log(state)

もっといい方法があればご教示ください。

ありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?