단어 수정, 삭제(수정 예정)

개발공부·2022년 12월 20일
0

* 문제

  • 기존에 index값으로 수정하는 splice 사용
  • 문제는 단어를 넣고 빼는 과정에서 index값은 계속 변함
    -> index 대신 id로 값을 구분하려고 함(mysql sequelize)
    -> 단어를 update 하는 과정에서 find를 썼다가 다른 것을 사용
    -> forEach 사용
    -> 왜 바로 값이 안 변하지????
    -> 리듀서의 인수들을 절대 변경(mutate)하지 마세요

오류 메세지
Invariant Violation: Expected $splice target to be an array; got undefined
at invariant

//처음에 시도한 방식(오류)
state.wordLists.map((word) => (word.id === data.id ? data : word));
//문제점 : map은 새로운 객체를 만드는 방식이라 기존 객체는 수정되지 않음

//다른 방식(오류)
import update from "react-addons-update";
const findIndex = state.wordLists.findIndex((w) => w.id === data.id);
      update(state.wordLists, {
        [findIndex]: {
          english: {
            $set: data.english,
          },
          korean: {
            $set: data.korean,
          },
          type: {
            $set: data.type,
          },
        },
      });
//문제점 : immer를 사용하고 있으므로 react-addons-update는 immutable 방식이고 본인의 경우 mutatble 방식으로 사용해야 함(맞지 않음)
      
//수정 1 (안티패턴)
 state.wordLists.find(
        (v) =>
          v.id === data.id &&
          ((v.english = data.english),
          (v.korean = data.korean),
          (v.type = data.type))
      );

//최종방식
 const findRevise = state.wordLists.find((v) => v.id === data.id);

      if (findRevise) {
        findRevise.english = data.english;
        findRevise.korean = data.korean;
        findRevise.type = data.type;
      }
profile
개발 블로그, 티스토리(https://ba-gotocode131.tistory.com/)로 갈아탐

0개의 댓글