0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[React] Stateの連結

Last updated at Posted at 2024-12-04

環境

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)

解説

  1. num + 1で、引数numを1つずつ増やす
  2. useState(false)で、isShowFaceの初期値をfalseに設定する
  3. ||で、引数(state)isShowFacefalseの時にsetIsShowFace(true)isShowFacetrueにする
  4. &&で、引数(state)isShowFacetrueの時にsetIsShowFace(false)isShowFacefalseにする
  5. &&で、引数(state)isShowFacetrueの時に\(^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にカウントアップされる時

  1. numは初期値の0isShowFaceは初期値のfalse
  2. カウントアップbuttonを押す
  3. num1になる
  4. 13で割り切れないので、elseに入る
  5. isShowFaceの初期値falseなので、何もしない
  6. \(^o^)/オワタは表示されない

numが2から3にカウントアップされる時

  1. num2isShowFacefalse
  2. カウントアップbuttonを押す
  3. num3になる
  4. 33で割り切れるので、if文の条件の最初の式に入る
  5. isShowFacefalseなので、setIsShowFace(true)isShowFacetrueにする
  6. \(^o^)/オワタが表示される

numが3から4にカウントアップされる時

  1. num3isShowFacetrue
  2. カウントアップbuttonを押す
  3. num4になる
  4. 43で割り切れないので、elseに入る
  5. isShowFacetrueなので、setIsShowFace(false)isShowFacefalseにする
  6. \(^o^)/オワタは表示されない

イメージ

image.png

参考リンク

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?