🪞
MUIのTextFieldに useRef を使う際の注意点
ref
ではなく、inputRef
属性に useRef
を設定
TestField
に対して、useRef
を使いたい時は、input
タグの情報(入力内容など)を取得したいことがほとんど(だと思う。)
そのため、ref
ではなく、inputRef
属性に useRef を設定する必要がある。
props | 対象 |
---|---|
ref |
TextField 全体(つまり div タグ) |
inputRef |
TextField の中にあるinput タグ |
検証
以下は、検証用のコンポーネント。
TextField
に対して、ref
とinputRef
の両方にuseRef
を設定している。
const ConfirmationToPersonInCharge = () => {
const divRef = useRef<HTMLDivElement>(null);
const textFieldRef = useRef<HTMLInputElement>(null);
const onClick = () => {
console.log(divRef.current);
console.log(textFieldRef.current);
};
return (
<>
<TextField ref={divRef} inputRef={textFieldRef} />
<Button onClick={onClick}>Click</Button>
</>
);
};
上のコンポーネントで、onClick
が発火すると以下の結果が得られる。
divRef
では、div
タグ全体、textFieldRef
では、input
タグの情報が得られることがわかる。
<!-- console.log(divRef.current); -->
<div class="MuiFormControl-root MuiTextField-root css-1u3bzj6-MuiFormControl-root-MuiTextField-root">
<div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl css-1hgf8cx-MuiInputBase-root-MuiOutlinedInput-root">
<input aria-invalid="false" id=":r3:" type="text" class="MuiInputBase-input MuiOutlinedInput-input css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input" value="">
<fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-1d3z3hw-MuiOutlinedInput-notchedOutline">
<legend class="css-ihdtdm"><span class="notranslate"></span></legend>
</fieldset>
</div>
</div>
<!-- console.log(textFieldRef.current); -->
<input aria-invalid="false" id=":r3:" type="text" class="MuiInputBase-input MuiOutlinedInput-input css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input" value="">
公式ドキュメントでもちゃんと説明されている
inputRef
の説明
input要素への参照を渡す。(翻訳 by DeepL)
ref
の説明
このrefはルート要素への参照を渡す。(翻訳 by DeepL)
Discussion