当サイトは、アフィリエイト広告を利用しています
Reactでinputのvalue属性に、angularやvueみたいに変数を紐づけて書くと
バインドされるかと思っていたが、inputの値が入力できなくなったので原因調べてみた。
下記のような書き方をした場合にinputの値は入力できなくなった。
import "./styles.css";export default function App() {let aaa = "aaaaa"return (<div className="App"><h1>Hello CodeSandbox</h1><h2>Start editing to see some magic happen!</h2><input type="text" value={aaa}/>{aaa}</div>);}
対応方法としては
を使う方法がある
inputのvalue属性はstateを通して操作する
import "./styles.css";import React, { useState } from "react";export default function App() {// useStateconst [state, setState] = useState("初期値");return (<div className="App"><h1>sample</h1><inputtype="text"value={state}onChange={(e) => setState(e.target.value)}/>{state}</div>);}
onChangeでevnetを受け取り、setStateに渡すようにする。
実際に動作するか確認してみる
useStateの基本や使い方ついては下記記事で紹介しています
input要素をuseRefで紐づけて操作する。
import "./styles.css";import React, { useState, useRef } from "react";export default function App() {// useStateconst [state, setState] = useState("初期値");// useRef// domのinputと紐づけるconst inputVal = useRef(null);// input要素のvalueをstateに設定するconst confilm = () => {setState(inputVal.current.value);};//削除するconst del = () => {inputVal.current.value = nullsetState(inputVal.current.value);};return (<div className="App"><h1>sample</h1><input type="text" ref={inputVal} /><button onClick={confilm}>決定</button><button onClick={del}>削除</button><div>{state}</div></div>);}
実際に動作確認してみる
useRefの使い方については下記記事で紹介しています