環境
MacBook Pro (2.3 GHz 8コアIntel Core i9)
macOS 14.0(23A344)
Homebrew 4.3.8
gh 2.52.0
まとめ
あるstate
(ここではnum
)を受け取り、
別のstate
(ここではisShowFace
)を更新関数
(ここではsetIsShowFace
)を用いて更新する。
ソースコードの前に
フォルダ構成
folda_structure
├── public/
│ ├── index.html
└── src/
│ ├── index.js(index.jsx)
│ └── App.js(App.jsx)
index.html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
index.js
index.js
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { App } from "./App";
const rootElement = document.getElementById("root");
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>
);
ソースコード(App.js)
解説
-
num + 1
で、引数num
を1つずつ増やす -
useState(false)
で、isShowFace
の初期値をfalse
に設定する -
||
で、引数(state
)isShowFace
がfalse
の時にsetIsShowFace(true)
でisShowFace
をtrue
にする -
&&
で、引数(state
)isShowFace
がtrue
の時にsetIsShowFace(false)
でisShowFace
をfalse
にする -
&&
で、引数(state
)isShowFace
がtrue
の時に\(^o^)/オワタ
が表示される
App.jsx
import { useState } from "react";
export const App = () => {
const [num, setNum] = useState(0);
const onClickCountUp = () => {
setNum(num + 1);
};
const [isShowFace, setIsShowFace] = useState(false);
if (num > 0) {
if (num % 3 === 0) {
isShowFace || setIsShowFace(true);
} else {
isShowFace && setIsShowFace(false);
}
};
return (
<>
<button onclick={onClickCountUp}>カウントアップ</button>
<p>{num}</p>
{isShowFace && <p>\(^o^)/オワタ</p>}
</>
);
};
Tips
-
||
: 左側がfalse
の場合に右側実行 = 左側がtrue
の場合は何もしない -
&&
: 右側がtrue
の場合に右側実行 = 左側がfalse
の場合は何もしない
処理
num
が0から1にカウントアップされる時
-
num
は初期値の0
、isShowFace
は初期値のfalse
- カウントアップ
button
を押す -
num
が1
になる -
1
は3
で割り切れないので、else
に入る -
isShowFace
の初期値false
なので、何もしない -
\(^o^)/オワタ
は表示されない
num
が2から3にカウントアップされる時
-
num
は2
、isShowFace
はfalse
- カウントアップ
button
を押す -
num
が3
になる -
3
は3
で割り切れるので、if
文の条件の最初の式に入る -
isShowFace
のfalse
なので、setIsShowFace(true)
でisShowFace
をtrue
にする -
\(^o^)/オワタ
が表示される
num
が3から4にカウントアップされる時
-
num
は3
、isShowFace
はtrue
- カウントアップ
button
を押す -
num
が4
になる -
4
は3
で割り切れないので、else
に入る -
isShowFace
のtrue
なので、setIsShowFace(false)
でisShowFace
をfalse
にする -
\(^o^)/オワタ
は表示されない