3
1

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 1 year has passed since last update.

onClickと無限レンダリング【React】

Last updated at Posted at 2022-04-23

onClickとは

クリック時のイベントを実行する
export default function App() {
  return (
    <div>
      <button onClick={() => {console.log("hello")}}>
        hello
      </button>
    </div>
  );
}

例えばこうかくと
クリック時にonClick内の関数が実行される

export default function App() {
  return (
    <div>
      <button onClick={function () {console.log("hello")}}>
        hello
      </button>
    </div>
  );
}

もちろんこう書いても同じである

ではこう書くとどうだろうか

export default function App() {
  return (
    <div>
      <button onClick={console.log("hello")}>hello</button>
    </div>
  );
}

これは、読み込み時にコンソールに【hello】が表示される
クリックしても何も起こらない

この状態で再レンダリングをしてみる

export default function App() {
  const [count, setCount] = useState(0);
  const add = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>{count}</p>
      <button onClick={add}>add</button>
      <button onClick={console.log("hello")}>hello</button>
    </div>
  );
}

コンソールに【hello】再表示される

<button onClick={console.log("hello")}>hello</button>

つまりこう書くと、レンダリングするごとにhelloが呼ばれてしまうのだ

onClickと無限レンダリング

これがconsoleならまだいいが、onClickの中にこう書いてしまったとする
export default function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>{count}</p>
      <button onClick={setCount(10)}>カウント10</button>
    </div>
  );
}
Error
Too many re-renders. React limits the number of renders to prevent an infinite loop.

無限レンダリングが発生してしまう

先ほど例で挙げたように、この書き方だと、レンダリング時にsetCountが呼ばれてしまうので

レンダリング=> setCount=> レンダリング=> setCount=> レンダリング....

という感じになってしまう

正しく、クリック時にイベントを実行するには

export default function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(10)}>カウント10</button>
    </div>
  );
}

こう書くべきである

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?