InputProps
の用途
TextField
のプロパティ。
3rdパーティ製ライブラリなどを用いて、入力フォーマットをカスタマイズすることなどができる。
細かい制御も可能になる。
InputProps
は、inputProps
とinputComponent
を持つ。
InputPropsは、inputPropsを内包している。
inputComponent
TextField
の処理コンポーネントを指定する。
inputProps
inputComponent
で指定したコンポーネントに渡すprops
オブジェクト。
自作コンポーネントのPropsとHtmlInputElement
やHTMLTextAreaElement
の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とHtmlInputElement
やHTMLTextAreaElement
のPropsが展開している。