<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 を作ってやっていくほうがいいような気もしますが、まあ動くのでとりあえずこれで。