[React] 가위바위보 만들기

2022. 9. 19. 17:22·개발/React
728x90
반응형

1. App.js

import "./App.css";
import { img01, img02, img03, img04, img05, img06 } from "./img";
import Block from "./Block";
import { useEffect, useState } from "react";
function App() {
  const select = {
    scissors: {
      name: "가위",
      img: img03,
    },
    rock: {
      name: "바위",
      img: img02,
    },
    paper: {
      name: "보",
      img: img01,
    },
  };

  const [userSelect, setUserSelect] = useState(null);
  const [comSelect, setComSelect] = useState(null);
  const [result, setResult] = useState(null);
  function userClick(selectValue) {
    setUserSelect(select[selectValue]);
    let arr = Object.keys(select);
    let comRandom = Math.floor(Math.random() * 3);
    setComSelect(select[arr[comRandom]]);
  }

  useEffect(() => {
    if (!userSelect) {
      setResult(null);
      return;
    }
    if (userSelect?.name == comSelect?.name) {
      setResult(img06);
    } else if (
      (userSelect?.name == "가위" && comSelect?.name == "보") ||
      (userSelect?.name == "바위" && comSelect?.name == "가위") ||
      (userSelect?.name == "보" && comSelect?.name == "바위")
    ) {
      setResult(img05);
    } else {
      setResult(img04);
    }
  }, [userSelect, comSelect]);

  return (
    <div>
      <div className="App">
        <Block data={userSelect} name="user" />
        <Block data={comSelect} name="com" />
        <Block data={{ img: result }} name="result" />
      </div>
      <div>
        <button
          onClick={() => {
            userClick("scissors");
          }}
        >
          가위
        </button>
        <button
          onClick={() => {
            userClick("rock");
          }}
        >
          바위
        </button>
        <button
          onClick={() => {
            userClick("paper");
          }}
        >
          보
        </button>
      </div>
    </div>
  );
}

export default App;

2. Block.js

import React from "react";

const Block = (props) => {
  let { data, name } = props;
  return (
    <div className="block">}
      <div>{name}</div>
      <img src={data && data.img} />
    </div>
  );
};

export default Block;

 

728x90
반응형

'개발 > React' 카테고리의 다른 글

[React] 게시판 만들기  (0) 2022.09.26
[React] 라우터 사용  (0) 2022.09.20
[React] 함수형 useEffect  (0) 2022.09.19
[React] 클래스형 컴포넌트  (2) 2022.09.19
[React] 달력 만들어보기  (0) 2022.09.14
'개발/React' 카테고리의 다른 글
  • [React] 게시판 만들기
  • [React] 라우터 사용
  • [React] 함수형 useEffect
  • [React] 클래스형 컴포넌트
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    html
    erc20
    go
    컨테이너
    nodejs
    ERC721
    명령어
    node
    30일챌린지
    js
    go언어
    mysql
    30일 챌린지
    node.js
    CSS
    프로그래머스
    도커
    React
    하이퍼레저
    블록체인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[React] 가위바위보 만들기
상단으로

티스토리툴바