코드캠프

코드캠프 7일차

Grace 2022. 9. 30. 12:41

map / filter

map 메소드

forEach와 비슷하게 배열의 요소를 하나씩 살펴보면서 반복 작업을 하는 메소드. 단, 첫 번째 아규먼트로 전달하는 콜백 함수가 매번 리턴하는 값들을 모아서 새로운 배열을 만들어 리턴하는 특징이 있다.

const numbers = [1, 2, 3];
const twiceNumbers = numbers.map((element, index, array) => {
  return element * 2;
});

console.log(twiceNumbers);// (3) [2, 4, 6]_텍스트_
const FRUITS = [
  { number: 1, title: "레드향" }, // <div>1 레드향</div>
  { number: 2, title: "샤인머스켓" }, // <div>2 샤인머스켓</div>
  { number: 3, title: "산청딸기" }, // <div>3 산청딸기</div>
  { number: 4, title: "한라봉" },
  { number: 5, title: "사과" },
  { number: 6, title: "애플망고" },
  { number: 7, title: "딸기" },
  { number: 8, title: "천혜향" },
  { number: 9, title: "과일선물세트" },
  { number: 10, title: "귤" },
];

export default function MapFruitsPage() {
  // const mapFruitsPage = FRUITS.map((el)=><div>{el.number} {el.title}</div>)

  return(
    <div>
      {FRUITS.map((el)=><div>{el.number} {el.title}</div>)}
    </div>


  )
}

filter 메소드

filter 메소드는 배열의 요소를 하나씩 살펴보면서 콜백함수가 리턴하는 조건과 일치하는 요소만 모아서 새로운 배열을 리턴하는 메소드.

const devices = [
  {name: 'GalaxyNote', brand: 'Samsung'},
  {name: 'MacbookPro', brand: 'Apple'},
  {name: 'Gram', brand: 'LG'},
  {name: 'SurfacePro', brand: 'Microsoft'},
  {name: 'ZenBook', brand: 'Asus'},
  {name: 'MacbookAir', brand: 'Apple'},
];

const apples = devices.filter((element, index, array) => {
  return element.brand === 'Apple';
#### });

console.log(apples);// (2) [{name: "MacbookPro", brand: "Apple"}, {name: "MacbookAir", brand: "Apple"}]

게시판 목록 만들기

map과 filter를 사용하여 쉽게 게시판 목록을 만들어줄 수 있다.

    <>
    <div>
      {data?.fetchBoards.map((el, idx)=>(
        <Row>
          <Column><input type="checkbox" /></Column>
          <Column>{idx+1}</Column>
          <Column>{el?.title}</Column>
          <Column>{el?.writer}</Column>
          <Column>{el?.createdAt}</Column>
          <Column><button id={el.number} onClick={handleDelete}>삭제하기</button></Column>
        </Row>
      ))}
    </div>
  </>

refetch Queries

게시판 목록에서 하나를 삭제할 경우 다시 불러와서 게시판을 보여주기

  async function handleDelete(event) {
    try {
      await deleteBoard({
        variables: {number: Number(event.target.id)},
        refetchQueries: [{ query: FETCH_BOARDS }]
      })
    } catch(error) {
      alert(error.message)
    }

  }

'코드캠프' 카테고리의 다른 글

코드캠프 9일차  (0) 2022.09.30
코드캠프 8일차  (0) 2022.09.30
코드캠프 6일차  (0) 2022.09.30
코드캠프 5일차  (0) 2022.09.29
코드캠프 4일차  (0) 2022.09.29