๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿฟ Project

[side PJ ] โšพ๏ธ์•ผ๊ตฌ๊ฒŒ์ž„ - ๋ฌธ์ œ์ƒํ™ฉ๊ณผ ํ•ด๊ฒฐ๊ณผ์ •

by Tamii 2021. 5. 20.
๋ฐ˜์‘ํ˜•

 

๋ฆฌ์•กํŠธ์—์„œ์˜ ์ƒํƒœ๊ด€๋ฆฌ๋Š” ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ฒŒ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜€๋Š”๋ฐ,

์ด๋ฒˆ์—๋Š”  ์ƒํƒœ๊ด€๋ฆฌ์˜ ๋ฌธ์ œ๋กœ ์ฐฉ๊ฐํ•œ ๊ฒฝ์šฐ๋กœ ์ง๊ถ์ธ ์˜คํ†ฐ๊ณผ ํ•จ๊ป˜ 3์‹œ๊ฐ„์„ ์‚ฝ์งˆํ–ˆ๋‹ค.&0&

 


๐Ÿ“Œ๋ฌธ์ œ๋ฐœ์ƒ 1

ํŒ€์„ ์„ ํƒํ–ˆ์„ ๋•Œ ์„ ํƒํ•œ ํŒ€์˜ ์ •๋ณด๋ฅผ setStateํ•˜์—ฌ ํ•˜์œ„ ๋‹ค๋ฅธ component์—์„œ ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์œผ๋‚˜

๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š์Œ

 

 

 

StartScreen์•ˆ์˜ handleClickTeam 

const handleClickTeam = async () => {
    let teamId;
    if (type === 'home') {
      teamId = game.homeTeamId;
    } else {
      teamId = game.awayTeamId;
    }
    
    try {
      const { data } = await axios.get(
        `http://13.209.109.186/baseball/games/${game.gameId}/${teamId}`
      );
      const [awayInfo, homeInfo] = [data.awayTeam, data.homeTeam];
      setAwayTeam(awayInfo);
      setHomeTeam(homeInfo);
      homeInfo.userSelected && setIsHome(true);
      history.push('/play-screen');
    } catch {
      setPlayable(false);
    }
    
    if (isHome) {
    setMyTeam(homeTeam.players);
    setMyTeamName(homeTeam.teamName);
    setCounterTeam(awayTeam.players);
    setCounterTeamName(awayTeam.teamName);
   	setIsDefense(isHome);
  } else {
    setMyTeam(awayTeam.players);
    setMyTeamName(awayTeam.teamName);
    setCounterTeam(homeTeam.players);
    setCounterTeamName(homeTeam.teamName);
  }
  };

 

์ฒ˜์Œ์—๋Š” hadleClickTeam์•ˆ์— if(isHome)์„ ๋„ฃ์–ด๋‘ 

์œ„์—์„œ setIsHome(true)๋กœ ์ธํ•ด ๋ฐ”๋€ isHome๊ฐ’์œผ๋กœ if๋ฌธ์„ ๋Œ๊ฒƒ์ด๋ผ ์˜ˆ์ƒํ–ˆ์ง€๋งŒ

์‹ค์ œ๋กœ๋Š”  ์ €๋ฒˆ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ „์˜if(isHome)์œผ๋กœ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— 

์ด component๊ฐ€ ๋ Œ๋”๋ง๋˜์–ด๋ฒ„๋ฆฐ ํ›„ set์ด ๋˜์—ˆ๋‹ค.

 

+ handleClickTeam์€ ํ•จ์ˆ˜์ด๊ณ  Component๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š”๊ฒŒ ์—†์–ด์„œ ๋‹ค๋ฅธ๊ณณ์—๋‹ค ๊ตฌํ˜„์„ ํ•˜๊ธฐ๋กœ ํŒ๋‹จ.

 

 

 

 

 

์ƒํƒœ ์„ธํŒ…์ด ๋„˜์–ด๊ฐ„ ๊ณณ์€

PlayScreen 

const PlayScreen = (props) => {
  const {
    isHome,
    homeTeam,
    awayTeam,
    setMyTeam,
    setMyTeamName,
    setCounterTeam,
    setCounterTeamName,
  } = useContext(GlobalContext);

  if (isHome) {
    setMyTeam(homeTeam.players);
    setMyTeamName(homeTeam.teamName);
    setCounterTeam(awayTeam.players);
    setCounterTeamName(awayTeam.teamName);
    // setIsDefense(isHome);
  } else {
    setMyTeam(awayTeam.players);
    setMyTeamName(awayTeam.teamName);
    setCounterTeam(homeTeam.players);
    setCounterTeamName(homeTeam.teamName);
  }
  return (
    <PlayScreenDiv>
      <Score />
      <CurrentPlayer />
      <Stadium />
      <LogList />
    </PlayScreenDiv>
  );
};

์—ฌ๊ธฐ์„œ useContext๋กœ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์™€ isHome์ด true์ด๋ฉด ๊ฐ’์„ ๋ Œ๋”๋ง ํ•ด์ค€๋‹ค.

PlayScreen์€ Component์ด๊ธฐ ๋•Œ๋ฌธ์— if ์กฐ๊ฑด์ด returnํ•˜๊ธฐ ์ „์— ์ •์ƒ ์ž‘๋™ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 


๐Ÿ“Œ๋ฌธ์ œ๋ฐœ์ƒ 2

์šฐ์ธก ์ƒ๋‹จ์— ํ˜„์žฌ์˜ ํˆฌ์ˆ˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š์•˜๋‹ค.

 

 

CurrentPlayer (PlayScreen์ด ๋ฟŒ๋ฆฌ๋Š” component)

const CurrentPlayer = () => {
  const { isHome, myTeam, counterTeam } = useContext(GlobalContext);
  const myPitcher = myTeam.filter((player) => player.pitcher === true)
  const counterPitcher = counterTeam.filter(
    (player) => player.pitcher === true
  );

์—ฌ๊ธฐ์„œ ๋ฐ›์€ myTeam์˜ ์ •๋ณด๋ฅผ myPitcher์— ๋ฟŒ๋ ค์ฃผ์–ด์•ผ ๋˜๋Š”๋ฐ ๋‚˜์˜ค์ง€ ์•Š์•˜๋‹ค.

์šฐ๋ฆฌ๋Š” ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ๋˜ ์ž˜๋ชป๋œ ์ค„ ์•Œ๋ฉฐ ์•ž์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ณผ์ •๋“ค์„ ๋ฐ”๊พธ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค .

 

PlayScreen์•ˆ์˜ if/else๋ฅผ useEffect๋กœ ๋ฌถ๊ธฐ -> ๊ฒฐ๊ณผ๋Š” ๋™์ผํ–ˆ๋‹ค. ์™œ๋ƒ? useEffect๋ฅผ ํ•˜๋‚˜ ์•ˆํ•˜๋‚˜ ์ƒ๊ด€ ์—†๊ธฐ ๋•Œ๋ฌธ

 ๊ทธ์™ธ ์ƒํƒœ๊ด€๋ฆฌ์— ๋”ฐ๋ฅธ ๋ฌธ์ œ๋กœ ํŒ๋‹จํ•˜๊ณ  ๋’ค์ฃฝ๋ฐ•์ฃฝ ์„ž๊ธฐ ์‹œ์ž‘ 

 

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ๊ณณ์ด์—ˆ๋‹ค ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์ž˜๋ชป ์ง€์ •ํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๐Ÿ’ฆ

 

ํ•ด๊ฒฐ 

์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์‹ค์ˆ˜ 

const CurrentPlayer = () => {
  const { isHome, myTeam, counterTeam } = useContext(GlobalContext);
  const myPitcher = myTeam.filter((player) => player.pitcher === true)[0];
  const counterPitcher = counterTeam.filter(
    (player) => player.pitcher === true
  )[0];

myTeam์˜ pitcher๊ฐ€ false์ธ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฐฐ์—ด์ด ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ

๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ผ๋Š” [0] ํ‘œ์‹œ๋ฅผ ํ•ด์•ผํ–ˆ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ“Œ optinal chaining

<CurrentPlayerDiv>
      <PlayerTag>PITCHER</PlayerTag>
      <Player>
        {isHome ? (
          <PlayerName>{myPitcher?.name}</PlayerName>
        ) : (
          <PlayerName>{counterPitcher?.name}</PlayerName>
        )}
        {isHome ? (
          <PitcherNum>#{myPitcher?.backNumber}</PitcherNum>
        ) : (
          <PitcherNum>#{counterPitcher?.backNumber}</PitcherNum>
        )}

๊ทธ๋ฆฌ๊ณ  ๋ฟŒ๋ ค์ค„๋•Œ  myPitcher?.name ์„ ํ†ตํ•ด 

myPitcher๊ฐ€ null์ด ์•„๋‹ ๋•Œ ๋ฟŒ๋ ค์ฃผ๋ผ๋Š” ์ง€์ •์„ ํ•œ์ค„๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

๋Š๋‚€์  

 

 

 

๋ฆฌ์•กํŠธ์˜ ์ƒํƒœ๊ด€๋ฆฌ์— ์ž์‹ ์ด ์—†์–ด

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ  ์ƒํƒœ๊ด€๋ฆฌ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ๋‹จ์–ธํ–ˆ๋‹ค.

์กฐ๊ธˆ๋” ์›๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๊ณ , data์˜ ํƒ€์ž… ๋˜ํ•œ ์‹ ๊ฒฝ์“ฐ์ž 

๋Œ“๊ธ€