2
0

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 3 years have passed since last update.

Material UI のTextFieldのInputPropsの使い方

Posted at

InputPropsの用途

TextFieldのプロパティ。
3rdパーティ製ライブラリなどを用いて、入力フォーマットをカスタマイズすることなどができる。
細かい制御も可能になる。

InputPropsは、inputPropsinputComponentを持つ。
InputPropsは、inputPropsを内包している。

inputComponent

TextFieldの処理コンポーネントを指定する。

inputProps

inputComponentで指定したコンポーネントに渡すpropsオブジェクト。
自作コンポーネントのPropsとHtmlInputElementHTMLTextAreaElementのPropsが許容される。

実装例

sample.jsx
const sample = ()=>{
    const [value, setValue] = useState("")

    return <TextField
            className={classes.text}
            InputProps={{
                inputProps: {
                    value: val,
                    onChange: (e:React.ChangeEvent<HTMLInputElement>) => setVal(e.target.value),
                    type: "text",
                    test: () => {}
                } as OriginalBaseInputProps, // 自作コンポーネントPropsとHtmlInputElementやHTMLTextAreaElementのProps
                inputComponent: OriginalBaseInput // 自作コンポーネント
            }}
        />
}
OriginalBaseInput.jsx
export interface OriginalBaseInputProps {
    test: () => void
}

export const OriginalBaseInput = (props: PropsWithChildren<InputBaseComponentProps>) => {
    function onKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {
        // 1桁目を常に選択
        ref.current?.setSelectionRange(0, 1)
    }

    const ref = createRef<HTMLInputElement>()
    return <input {...props} onKeyDown={onKeyDown} ref={ref}/>
}

inputComponentに渡ってくるpropsには、inputRefが入っている。
OriginalBaseInput{...props}で自作コンポーネントのPropsとHtmlInputElementHTMLTextAreaElementのPropsが展開している。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?