13
3

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

Reactのテキストボックスのフォーカスが外れる問題ではまった

Posted at

他の画面では正常に動いているReactのカスタムコンポーネントが、特定の画面で呼び出した場合のみ、テキストボックスで入力をするたびにフォーカスが外れる事象に遭遇してはまったのでメモを残しておきます。

色々と試行錯誤したところ、原因としてはカスタムコンポーネントを呼び出しているrenderの書き方の違いによるものでした。
Reactのrender部分はいくつか書き方がありますが、以下で書いているHogeの様に定義し、その中でstateの更新をかけると、テキストボックスのフォーカスが外れます。詳細は追っていませんが、Hogeのスタイルで書くとstateが更新される度にコンポーネントが作り直されているのではないかと思います。

render() {
  const Hoge = () => {
    const props = {
      type: "text",
      value: this.state.hoge,
      onChange: e => this.setState({hoge: e.target.value})
    };
    return <div>hoge<input {...props}/></div>;
  };

  return (
    <div>
      <Hoge/>
      {this._renderFuga()}
    </div>
  );
}

_renderFuga() {
  const props = {
    type: "text",
    value: this.state.fuga,
    onChange: e => this.setState({fuga: e.target.value})
  };
  return <div>fuga<input {...props}/></div>;
}

13
3
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
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?