まず、props.onClick が関数の時、次の x と y の違いは分かりますか?
js
1const x = props.onClick();
2const y = props.onClick;
3const z = y();
- x は props.onClick という関数を実行した結果 (戻り値) が代入されます。
- y は props.onClick の値がそのまま代入されます。
特に、props.onClick が関数の場合、関数を実行するのではなく、関数がそのまま代入されます。
- z は y という関数を実行した結果が代入されますが、y は props.onClick なので、たぶん x と同じ値になります。
props.onClick が値を返さない関数の場合、x と z の値は undefined になりますが、重要なのは関数が実行されるタイミングですね。()
を付けなければ実行されず、()
を付けた時に実行されます。
<button className='square' onClick={props.onClick}>
これは、button の onClick に props.onClick の値 (実は関数) をそのまま渡します。
そして、ボタンが押されるとその関数が実行されます。
<button className='square' onClick={() => props.onClick}>
これは、button の onClick に () => props.onClick
という関数を渡します。
これは props.onClick を実行せずにそのまま返す関数なので、ボタンを押しても何も起こりません。
<button className='square' onClick={() => props.onClick()}>
このように、button の onClick に () => props.onClick()
という関数を渡せば、ボタンを押した時に「props.onClick を実行して、その結果を返す」関数が実行されるので、期待通りに動作すると思います。
ちなみに、よくある間違いですが、
<button className='square' onClick={props.onClick()}>
これは、ボタンを作る時に props.onClick を実行して、その結果をボタンの onClick に設定します。
つまり、ボタンを押さなくても props.onClick が実行されてしまいますし、props.onClick の戻り値は undefined なので、ボタンを押しても何も起こりません。(その前に、TypeScript では button の onClick に関数でないものを渡しているというコンパイルエラーになりますけどね。)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/24 03:44