State 저장 목록 사용

Hover·2022년 7월 11일
0

Udemy리액트

목록 보기
10/19

새로운 항목이 추가 될 때마다 expense배열을 어떻게 업데이트 할 수 있을까요?

NewExpense는 onAddExpense라는 메소드에 addExpenseHandler라는 함수를 포인터로 가르키고 있습니다.

ExpenseForm에서 서브밋 될때마다 함수 실행 -> NewExpense -> App.js로 오므로 새로운 데이터가 들어올 때마다 addExnepnseHandler 함수가 실행됩니다.

  const addExpenseHandler = (expense)=>{
    console.log('App.js');
    console.log(expense);
  }

따라서 저희는 해당 expense배열을

const expenses = [
    {
      id: 'e1',
      title: 'Toilet Paper',
      amount: 94.12,
      date: new Date(2020, 7, 14),
    },
    { id: 'e2', title: 'New TV', amount: 799.49, date: new Date(2021, 2, 12) },
    {
      id: 'e3',
      title: 'Car Insurance',
      amount: 294.67,
      date: new Date(2021, 2, 28),
    },
    {
      id: 'e4',
      title: 'New Desk (Wooden)',
      amount: 450,
      date: new Date(2021, 5, 12),
    },
  ];

expenses 객체에 추가하면 됩니다.

이 방법은 state를 이용하면 됩니다.

const INITIAL_EXPENSES = [
  {
    id: 'e1',
    title: 'Toilet Paper',
    amount: 94.12,
    date: new Date(2020, 7, 14),
  },
  { id: 'e2', title: 'New TV', amount: 799.49, date: new Date(2021, 2, 12) },
  {
    id: 'e3',
    title: 'Car Insurance',
    amount: 294.67,
    date: new Date(2021, 2, 28),
  },
  {
    id: 'e4',
    title: 'New Desk (Wooden)',
    amount: 450,
    date: new Date(2021, 5, 12),
  },
];

일단 기존 배열을 함수 바깥으로 빼서 전역변수로 INITIAL_EXPENSES로 초기화상수를 만들어주겠습니다.

const [expenses,setExpenses] = useState(INITIAL_EXPENSES);

이후 expenses에 state를 걸어주며 초기값을 기존 배열로 설정해줍니다.

const addExpenseHandler = (expense)=>{
    setExpenses(prevExpenses =>{
      return [expense,...prevExpenses]
    });
  }

이후 최신의 스냅샷을 얻기 위해 위와 같은 방법으로 상태를 업데이트 해줍니다.

profile
프론트엔드 개발자 지망생입니다

0개의 댓글