<input ref={(element) => this.input = element}/>
しておいて this.input.focus()
とか this.input.blur()
とか呼び出すのはReact的ではないのでなんとかしたいものだなあ、と思って一旦こういう関数を作って運用してみることにしました。
// in TypeScript // This function emulates "focus" attributes for React DOM elements export function createFocusHandler<E extends HTMLElement>(focused: boolean) { return (element: E | null) => { if (element && element.matches(":focus") !== focused) { if (focused) { element.focus(); } else { element.blur(); } } }; }
これを次のように ref
へのイベントハンドラとして渡せばOKです。
<input ref={createFocusHandler(focused)}/>
ラッパー component を作ってやっていくほうがいいような気もしますが、まあ動くのでとりあえずこれで。