๐ŸŽจ Frontend/React

๐Ÿ”ฎ React - 7. ์ปดํฌ๋„ŒํŠธ ๋ฐ˜๋ณต (Array, Map)

kongmi 2023. 4. 13. 13:54

  • ๋ฆฌ์•กํŠธ์—์„œ ๋ฐฐ์—ด๊ณผ ๋งต์€ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์€ ์ˆœ์„œ๊ฐ€ '์žˆ๋Š”' ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ, ๊ฐ ์š”์†Œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งต์€ key์™€ value๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ๋กœ, key์™€ value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ key๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ณ ์œ ํ•œ ๊ฐ’ ์ž…๋‹ˆ๋‹ค.

๊ณ ์ • ๋ฐฐ์—ด ๋ Œ๋”๋ง

๐Ÿ™ ๋น„ํšจ์œจ ์ ์ธ ๋ฐฉ๋ฒ• : ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

import React from 'react';

const ArrayTest = () => {
  const users = [
    {
      id: 100,
      userName: 'Karly',
      eMail: 'king@naver.com'
    },
    {
      id: 200,
      userName: 'Elastine',
      eMail: 'hoho@gmail.com'
    },
    {
      id: 300,
      userName: 'Kim',
      eMail: 'kim@kakao.com'
    }
  ];
  return (
    <>
      <div>
        <b>{users[0].userName}</b> <span>{users[0].eMail}</span>
      </div>
      <div>
      <b>{users[1].userName}</b> <span>{users[1].eMail}</span>
      </div>
      <div>
      <b>{users[2].userName}</b> <span>{users[2].eMail}</span>
      </div>
    </>
  );
}

export default ArrayTest;

์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  props๋กœ ์ „๋‹ฌ

import React from 'react';

const User = (props) => {

  return (
    <>
      <b>{props.user.userName}</b> <span>{props.user.eMail}</span>
    </>
  );
}

const ArrayTest2 = () => {
  const users = [
    {
      id: 100,
      userName: 'Karly',
      eMail: 'king@naver.com'
    },
    {
      id: 200,
      userName: 'Elastine',
      eMail: 'hoho@gmail.com'
    },
    {
      id: 300,
      userName: 'Kim',
      eMail: 'kim@kakao.com'
    }
  ];
  
  return (
    <>
      <div>
        <User user={users[0]}/>
      </div>
      <div>
        <User user={users[1]} />
      </div>
      <div>
        <User user={users[2]} />
      </div>
    </>
  );
}

export default ArrayTest2;

map() ํ•จ์ˆ˜ ์ด์šฉ

import React from "react";

const MapTest = () => {
  const users = [
    {
      id: 100,
      userName: "Karly",
      eMail: "king@naver.com",
    },
    {
      id: 200,
      userName: "Elastine",
      eMail: "hoho@gmail.com",
    },
    {
      id: 300,
      userName: "Kim",
      eMail: "kim@kakao.com",
    },
  ];
  
  return (
    <>
      {users &&
        users.map((user) => (
          <div key={user.id}>
            <p>{user.userName} : {user.eMail}</p>
          </div>
        ))}
    </>
  );
};

export default MapTest;

useState์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„

To Do List

import React,{useState} from "react";
import "./App.css";

const IterationSample = () => {
  const [names, setNames] = useState([
    {id: 1, text: '๋ˆˆ์‚ฌ๋žŒ'},
    {id: 2, text: '์–ผ์Œ'},
    {id: 3, text: 'ํฌ๋ฆฌ์Šค๋งˆ์Šค'},
    {id: 4, text: '๊ฒจ์šธ'}
  ]);
  const [inputText, setInputText] = useState("");
  const [nextId, setNextId] = useState(5);
  
  const onChange = e => setInputText(e.target.value);
  
  const onClick = () => {
    const nextNames = names.concat({
      id: nextId,
      text: inputText
    });
    setNextId(nextId + 1);
    setNames(nextNames);
    setInputText(""); // inputText๋ฅผ ๋น„์›Œ์คŒ
  }
  const onRemove = id => {
    const nextNames = names.filter(name => name.id !== id);
    setNames(nextNames);
  }
  const namesList = names.map(name => (
    <li key={name.id} onDoubleClick={() => onRemove(name.id)}>{name.text}</li>
  ));

  return (
    <>
      <p className="title-name">To Do List!</p>
      <p>์‚ญ์ œ๋Š” ํ•ด๋‹น ํ•ญ๋ชฉ์„ ๋”๋ธ”ํด๋ฆญ ํ•˜์„ธ์š”.</p>
      <input type="text" value={inputText} onChange={onChange} />
      <button onClick={onClick}>์ถ”๊ฐ€</button>
      <ul>
        {namesList}
      </ul>
    </>
  );
}

export default IterationSample;
.title-name {
  color: royalblue;
  font-size: 2em;
  background-color: orange;
}