๐Ÿฑ #6 React.js - ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๊ฒŒ์ž„

๋ฐ•์ค€์„ยท2022๋…„ 10์›” 24์ผ
2

React

๋ชฉ๋ก ๋ณด๊ธฐ
7/13
post-thumbnail

๐Ÿงฉ ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๊ฒŒ์ž„


React๋กœ ๊ตฌํ˜„ํ•œ ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๊ฒŒ์ž„์ด๋‹ค.

๊ฐ€์œ„๋ฐ”์œ„๋ณด๊ฒŒ์ž„ ํŽ˜์ด์ง€
github

  1. Let's play ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ์œ ์ €๊ฐ€ ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด ์ค‘์— ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋ฉด
  3. ์ปดํ“จํ„ฐ๋Š” ๋žœ๋ค์œผ๋กœ ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด ์ค‘์— ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  4. ์œ ์ €๋‚˜ ์ปดํ“จํ„ฐ์ค‘ ์ด๊ฒผ๋‹ค๋ฉด ํ…Œ๋‘๋ฆฌ์™€ ๊ธ€์ž๊ฐ€ ๋…น์ƒ‰์œผ๋กœ ์กŒ๋‹ค๋ฉด ๋นจ๊ฐ„์ƒ‰ ๋น„๊ฒผ๋‹ค๋ฉด ๋ณด๋ผ์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

๐Ÿƒโ€โ™‚๏ธ Let's play ๋ฒ„ํŠผ ํ˜ธ๋ฒ„ ์ฑ„์›Œ์ง€๋Š” css

  • JAVASCRIPT
<button className='playBtn' onClick={() => show()}>Let's play??</button>
  • CSS
.playBtn{
  width: 150px;
  height: 50px;
  border: 3px solid white;
  border-radius: 20px;
  background: none;
  margin-top: 50px;
  cursor: pointer;

  color: white;
  font-size: 20px;
  
  position: relative;
  z-index: 1;
}
.playBtn:hover{
  color: black;
  background-color: white;
  -webkit-transition: all 0.4s;
  -moz-transition: all 0.4s;
  -ms-transition: all 0.4s;
  -o-transition: all 0.4s;
  transition: all 0.4s;
}
.playBtn:after {
  content: "";
  border-radius: 20px;
  width: 0%;
  height: 100%;
  top: 0;
  position: absolute;
  left: 0;
  -webkit-transition: all 0.4s;
  -moz-transition: all 0.4s;
  -ms-transition: all 0.4s;
  -o-transition: all 0.4s;
  transition: all 0.4s;
  background: #ffffff;
}
.playBtn:hover:after {
  width: 100%;
  z-index: -1;
}

๐Ÿƒโ€โ™‚๏ธ Let's play ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๊ฒŒ์ž„ ์‹œ์ž‘

  • JAVASCRIPT
  const show = () => {
    let bg = document.querySelector(".backGround");
    bg.classList.add("active")
  };

 <button className='playBtn' onClick={() => show()}>Let's play??</button>
  • CSS
.active{
  transform: scale(0);
  transition: 1s;
}

Les's play ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด active๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€ ๋˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.
active๋Š” transform์— scale์„ 0์œผ๋กœ ์ค˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  transition์œผ๋กœ ์‹œ๊ฐ„ 1s์„ ์คฌ๋‹ค.

๐Ÿƒโ€โ™‚๏ธ ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด๋ฅผ ์„ ํƒํ•ด ๊ฒŒ์ž„์‹œ์ž‘.

๐Ÿƒโ€โ™‚๏ธ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด ๋ฒ„ํŠผ

๐Ÿงฉ ์ด๋ฏธ์ง€ ์ถœ๋ ฅ(user)

const choice = {
    rock: {
      name: "Rock",
      img: "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpSJwo%2FbtqXJV1lACE%2Fnx5XrxkCLWXh9UsnoS8vbK%2Fimg.png"
    },
    paper: {
      name: "Paper",
      img: "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmjB2s%2FbtqXHhp6kpG%2FTH14W4U612SxKo9uuR2sB0%2Fimg.png"
    },
    scissors: {
      name: "Scissors",
      img: "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHfURw%2FbtqXKvOTNWK%2FgWTwPXEg9QzSV0ilOuwuak%2Fimg.png"
    }
  }

๋จผ์ € ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด์— ๋Œ€ํ•œ ๊ฐ์ฒด์„ ๋งŒ๋“ ๋‹ค.

<div className='btn-style'>
        <button onClick={() => play("scissors")}><FontAwesomeIcon icon={faHandScissors} className="font" /></button>
        <button onClick={() => play("rock")}><FontAwesomeIcon icon={faHandBackFist} className="font" /></button>
        <button onClick={() => play("paper")}><FontAwesomeIcon icon={faHand} className="font" /></button>
</div>

๋ฒ„ํŠผ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด play()ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑํ•œ๋‹ค, ()=> ์ด๊ฒƒ์ด ์ฝœ๋ฐฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฝœ๋ฐฑํ•˜๋ฉด์„œ play()ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ๋„ ๊ฐ™์ด ์ฝœ๋ฐฑํ•œ๋‹ค.

const play = (userChoice) => {

};

play()ํ•จ์ˆ˜์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์„ userChoice๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.
console.log(userChoice)๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด play("๋‚ด์šฉ") ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์ด userChoice๋งค๊ฐœ๋ณ€์ˆ˜์— ์ €์žฅ๋œ๋‹ค.

์ด์ œ play() ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์™€์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ถ€ํ„ฐ state๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

const [userSelect, setuserSelect] = useState(null);
const play = (userChoice) => {
	setuserSelect(choice[usserChoice]);
};

setuserSelect(choice[usserChoice]); ์€ setuserSelect๋Š” ๋ณ€๊ฒฝํ•  ๋‚ด์šฉ์„ ์ž…๋ ฅ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. choice๋ผ๋Š” ๋ฐฐ์—ด์˜ userChoice๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์ธ๋ฑ์Šค๊ฐ’์œผ๋กœ ํ• ๋‹น ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ€์œ„ ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜๋ฉด Scissors๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ setuserSelect์— ์ €์žฅ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ด ์ €์žฅ๋œ ๊ฐ’์„ ์จ์•ผํ•œ๋‹ค.

return (
    <div className='container'>
      <div className='wrap'>
        <Box name="You" item={userSelect}/>
        <Box name="Computer"/>
      </div>
    </div>
  );

item={userSelect} Box ์ปดํฌ๋„ŒํŠธ์— item ์ด๋ผ๋Š” ์†์„ฑ ๊ฐ’์„ userSelect๋กœ ์ง€์ • ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

โŒ ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋œฐ ๊ฒƒ์ด๋‹ค.

์ด ์—๋Ÿฌ๊ฐ€ ๋œฌ ์ด์œ ๋Š” ์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด "You" ๋ผ๋Š” ๋ฐ•์Šค์—๋Š” item์†์„ฑ์ด ์ €์ •๋˜์–ด ์žˆ๋Š”๋ฐ "computer"์—๋Š” item ์†์„ฑ์ด ์ง€์ •๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ Box์ปดํฌ๋„ŒํŠธ๋Š” "You"๋ฅผ ๊ทธ๋ฆด ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ "computer"๋ฅผ ๊ทธ๋ฆด ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌํ•œ ์ด์œ ๋กœ ์ž ์‹œ "computer" ๋ฐ•์Šค๋Š” ์ฃผ์„์„ ๋‹ฌ์•„์•ผ ํ•œ๋‹ค.

item={userSelect} ์†์„ฑ์„ ์ง€์ •ํ–ˆ๋‹ค๋ฉด Box.js๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

  • Box.js
import React from 'react'

const box = (props) => {
  return (
    <div className=box>
        <h1>{props.name}</h1>
        <img src={props.item && props.item.img} alt="" />
        <p>{result}</p>
    </div>
  )
}

export default box

์ด๋ฏธ์ง€ ๊ฐ’์˜ props๋ฅผ ์‚ฌ์šฉํ•ด ํ• ๋‹น ํ•ด์ค€ ๊ฒƒ์ด๋‹ค. ๊ทผ๋ฐ ์™œ imgํ• ๋‹น ํ•  ๋•Œ <img src={props.item && props.item.img} alt="" /> ๋‹ค๋ฅธ ์ฝ”๋“œ์™€ ๋‹ค๋ฅธ๊ฐ€?

๊ทธ ์ด์œ ๋Š” <img src={props.item.img} alt="" /> ์ด๋ ‡๊ฒŒ๋งŒ ์“ฐ๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.

์—๋Ÿฌ๊ฐ€ ๋œฌ ์ด์œ ๋Š” ์œ„ state์—์„œ const [userSelect, setuserSelect] = useState(null);์— null๊ฐ’์„ ์ค€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ปดํ“จํ„ฐ ์ž…์žฅ์—์„  null์„ ๋ฐ›์•„ UI๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

<img src={props.item && props.item.img} alt="" />
props.item์— ๊ฐ’์ด ์žˆ์„ ๋•Œ(null ์ด ์•„๋‹ ๋•Œ)๋งŒ, props.item.img๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

๐Ÿงฉ ์ด๋ฏธ์ง€ ์ถœ๋ ฅ(computer)

  const randomChoice = () => {
    let itemArray = Object.keys(choice);
    let randomitem = Math.floor(Math.random() * itemArray.length);
    let final = itemArray[randomitem];

    return choice[final];
  };

๋˜‘๊ฐ™์ด ์œ„์— ๋ฐฐ์—ด์ด ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ์ปดํ“จํ„ฐ๊ฐ€ ๋žœ๋ค์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ด UI์— ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ผ๋‹จ ๋จผ์ € randomChoice ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ๋งŒ๋“ ๋‹ค.

let itemArray = Object.keys(choice); itemArray๋ผ๋Š” ๋ณ€์ˆ˜์— choice๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

let randomitem = Math.floor(Math.random() * itemArray.length); randomitem์ด๋ผ๋Š” ๋ณ€์ˆ˜์— Math.random()๋ผ๋Š” ํ•จ์ˆ˜์— itemArray๋ฐฐ์—ด์— ๊ธธ์ด๋งŒํผ ๊ณฑํ•˜๊ณ  Math.floor() ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์จ์„œ ๋’ค์— ์†Œ์ˆซ์ ์„ ๋‹ค ์—†์•  ํ• ๋‹นํ•œ๋‹ค.

let final = itemArray[randomitem]; final์ด๋ผ๋Š” ๋ณ€์ˆ˜์— itemArray๋ณ€์ˆ˜์— randomitem๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์ธ๋ฑ์Šค ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

์ด๊ฒƒ์„ return choice[final]; returnํ•ด choice ๊ฐ์ฒด ๊ฐ’์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

randomChoice() ํ•จ์ˆ˜๋ฅผ ๋‹ค ์ž‘์„ฑํ•˜์˜€๋‹ค๋ฉด play() ๋ฒ„ํŠผ์— ํ•จ์ˆ˜๋ฅผ ์จ์•ผํ•œ๋‹ค.

const [computerSelect, setcomputerSelect] = useState(null);

 const play = (userChoice) => {
    setuserSelect(choice[userChoice]);

    let computerChoice = randomChoice();
    setcomputerSelect(computerChoice);
  };

computerChoice๋ผ๋Š” ๋ณ€์ˆ˜์— randomChoice()ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๊ณ  setcomputerSelect์— computerChoice๋ฅผ ์ง€์ •ํ•˜๊ณ  ์•„๊นŒ ์ฃผ์„์„ ํ–ˆ๋˜ "Computer" ์ปดํฌ๋„ŒํŠธ ๋ฐ•์Šค์—๋„ item๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

return (
    <div className='container'>
      <div className='wrap'>
        <Box name="You" item={userSelect}/>
        <Box name="Computer" item={computerSelect}/>
      </div>
    </div>
  );

๐Ÿงฉ ๊ฒฐ๊ณผ ์ถœ๋ ฅ(win, lose, tie)

const [result, setResult] = useState("");

const play = (userChoice) => {
    setuserSelect(choice[userChoice]);

    let computerChoice = randomChoice();
    setcomputerSelect(computerChoice);

    setResult(randomPic(choice[userChoice], computerChoice));
  };

const randomPic = (user, computer) => {
    if (user.name === computer.name) {
      return "Tie"
    } else if (user.name === "Rock") return computer.name === "Scissors" ? "Win" : "Lose";
    else if (user.name === "Scissors") return computer.name === "Paper" ? "Win" : "Lose";
    else if (user.name === "Paper") return computer.name === "Rock" ? "Win" : "Lose";
  };

์ŠนํŒจ๋ฅผ ๊ฐ€๋ฆฌ๊ธฐ ์œ„ํ•ด randomPic ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  const [result, setResult] = useState(""); state๋ฅผ ์ง€์ •ํ•˜๊ณ  setResult(randomPic(choice[userChoice], computerChoice));
randomPic(์œ ์ €๊ฐ’, ์ปดํ“จํ„ฐ ์„ ํƒ ๊ฐ’)์„ ์ „๋‹ฌํ•œ๋‹ค.

์ „๋‹ฌ ๋œ ๊ฐ’์„ const randomPic = (user, computer) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ  if๋ฌธ์„ ์จ์„œ user.name ์ด computer.name์ด ๊ฐ™์œผ๋ฉด TIE๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด if๋ฌธ ์•ˆ์— ๋˜ if๋ฅผ ์“ด๋‹ค. ์‚ผํ•ญ ์—ฐ์‚ฐ์‹์„ ์“ด ๊ฒƒ์ด๋‹ค.

๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด user.name๊ณผ computer.name์ด ๊ฐ™์ง€ ์•Š์•„?? ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด user.name์ด Rock๊ณผ ๊ฐ™์•„?? ๊ฐ™๋‹ค๋ฉด computer.name์ด Scissors์™€ ๊ฐ™์•„?? ๊ฐ™๋‹ค๋ฉด Win์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด Lose๋ฅผ ์ถœ๋ ฅํ•ด! ์ด๋œป์ด๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์„ค์ •์„ ๋‹คํ–ˆ๋‹ค๋ฉด play()ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋„ ๊ฐ’์ด ์ „๋‹ฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

return (
    <div className='container'>
      <div className='wrap'>
        <Box name="You" item={userSelect} result={result}/>
        <Box name="Computer" item={computerSelect} result={result}/>
      </div>
    </div>
  );

Box์ปดํฌ๋„ŒํŠธ์— result={result} ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  box.js์—๋„ result ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

return (
    <div className={`box ${result}`}>
        <h1>{props.name}</h1>
        <img src={props.item && props.item.img} alt="" />
        <p>{props.result}</p>
    </div>
  );

โŒ ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. reuslt๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๊ฒฐ๊ณผ๋Š” ๋‚˜์˜ค๊ฒ ์ง€๋งŒ user์™€ computer๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋˜ if๋ฌธ์„ ์จ์•ผํ•œ๋‹ค.

    let result;

    if(props.name === "Computer" &&
        props.result !== "Tie" &&
        props.result !== ""
    ){
        result=props.result === "Win"? "Lose":"Win";
    } else {
        result=props.result;
    }

  return (
    <div className={`box ${result}`}>
        <h1>{props.name}</h1>
        <img src={props.item && props.item.img} alt="" />
        <p>{result}</p>
    </div>
  )

result๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ  props.name์ด computer์™€ ๊ฐ™๊ฑฐ๋‚˜ props.result๊ฐ€ Tie๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ ๋น„์–ด์žˆ์„ ๋•Œ props.result๊ฐ€ win์ด๋ž‘ ๊ฐ™์•„?
๊ฐ™๋‹ค๋ฉด Lose๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ณ  ๊ฐ™์ง€์•Š๋‹ค๋ฉด Win์„ ์ถœ๋ ฅํ•ด์ค˜!!

๊ทผ๋ฐ ์œ„ ์กฐ๊ฑด๊ณผ ๋งž์ง€ ์•Š๋‹ค๋ฉด ๊ทธ๋ƒฅ props.result;๋ฅผ ์ถœ๋ ฅํ•ด์ค˜

์ž‘์„ฑํ•œ if๋ฌธ์„ result๋ณ€์ˆ˜์— ๋‹ด๊ณ  <p>{result}</p>์— result ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ์œ ์ €๊ฐ€ ์ด๊ธฐ๋ฉด ์ปดํ“จํ„ฐ๋Š” ์ง€๊ณ  ์œ ์ €๊ฐ€ ์ง€๋ฉด ์ปดํ“จํ„ฐ๊ฐ€ ์ด๊ธฐ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿงฉ ๊ฒฐ๊ณผ(win, lose, tie)์— ๋”ฐ๋ฅธ ๋ฐ•์Šค ์ƒ‰ ๋ณ€๊ฒฝ

  return (
    <div className={`box ${result}`}>
        <h1>{props.name}</h1>
        <img src={props.item && props.item.img} alt="" />
        <p>{result}</p>
    </div>
  )

Box์ปจํฌ๋„ŒํŠธ์˜ className์— ๋™์ ์ธ result๊ฐ’์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ  CSS๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

.Win{
  border: 10px solid green;
  color : green;
  transition: 1s;
}
.Lose{
  border: 10px solid red;
  color : red;
  transition: 1s;
}
.Tie{
  border: 10px solid purple;
  color : purple;
  transition: 1s;
}
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ ์ด์ œ ์ •๋ง ๋

๋‹ค์Œ์—๋Š” ๋” ์‹ฌํ™”์ ์œผ๋กœ ๋…ธ๋ ฅํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ์ง€

profile
์•ˆ๋…•ํ•˜์„ธ์š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๊ธ€์„ ์ด์ „ ์ค‘์ž…๋‹ˆ๋‹ค.

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 10์›” 28์ผ

์œฝ.. ํ•จ์ˆ˜ ใ… ใ…  ๊ทผ๋ฐ ์ €๋Ÿฐ gif ์›€์งค์€ ์ง์ ‘ ์ฐพ์•„์„œ ์ฒจ๋ถ€ํ•˜์‹œ๋Š”๊ฑด๊ฐ€์š”? ใ…‹ใ…‹ใ…‹ใ…‹ ํŽญ์ˆ˜ ์›ƒ๊ฒจ์š”

1๊ฐœ์˜ ๋‹ต๊ธ€