React의 대상 배열 오류로 인해immutability를 복습합니다

결론은, 나는 단지 내가 지금 무테이트가 하고 있는지 아닌지를 주의하고 싶을 뿐이다!

데이터의 변경 방법은 적어도 두 가지로 나뉜다

  • 데이터의 값을 변경하고 싶을 때 다음과 같은 두 가지 변경 방법이 있다.전자는 특별히mutate(다시 쓰기)라고 불리지만, 후자는 특별히 왜라고 불리지 않는다
  • 현재 데이터에 저장된 메모리 주소의 값을 직접 다시 쓰기
  • 현재 데이터가 존재하는 메모리 주소에 저장된 값을 다른 메모리 주소로 복사한 후 복제된 데이터를 고친다(물론 변경된 메모리 주소를 이 데이터를 참조하는 모듈로 어떤 수단으로 전송해야 한다)
  • 데이터 형식으로서mutable / immutable

  • mutate의 데이터는mutable이고 그렇지 않으면immutable
  • 이다.
  • TS에서 원시 데이터는immutable이고 대상 유형 데이터는mutable
  • 추천 조작의immutable 처리

  • 'mutable'과'mutate가 해야 할 일'이 다르다
  • 특히 React에서immutability(즉'제작된 데이터가 직접 변경되지 않는다')를 유지하는 것을 추천합니다.주요 이유는 다음과 같다.
  • 비용이 저렴하고 검사 대상 간의 변화가 쉽다.그 결과 재현의 시간은 쉽게 제어된다
  • 역사 기록의 보존을 비롯한 복잡한 규격을 실현하기 쉽다
  • https://ja.reactjs.org/tutorial/tutorial.html#why-immutability-is-important

    객체 정렬 작업 시 고려 사항


  • 대상 배열을 처리할 때, 진열 자체가 가지고 있는 데이터가 대상에 대한 인용임을 주의하십시오
  • 예를 들어 복제 대상을 배열할 때 메모리에 두 개의 진열이 존재하지만 각각 같은 참고를 가지고 있다.따라서 한 배열로 원소 대상을 바꾸면 다른 배열에도 원소에 대한 변화가 반영된다
  • 구성 요소 간의props교접과 관련이 있다면 언뜻 보기에는 이해하기 어려운 버그가 있을 수 있으므로 주의해야 한다

  • 대상의 배열을 변경할 때immutability(즉'한 번 만든 데이터를 직접 변경하지 않음')를 유지하는 방법은 다음과 같은 두 가지가 있다.
  • immer 라이브러리를 사용합니다.예를 들어 제품은 매우 편리하다
  • 스프레드시트를 통해 변경할 요소의 객체로 적절하게 복사하여 처리
  • array = [{name: "a", value: 1}, {name: "b", value: 2}]
    
    //元のarrayまで変更されてしまうやり方
    //arrayをコピーしているけど、参照は同じなのでarrayの要素も変更を受ける
    newArray = [...array]
    newArray[0].value = changedValue
    
    //元のarrayの変更は回避するやり方①
    //arrayをディープコピーした配列が生成され、
    //それがcopiedArrayとして第2引数の関数で処理された結果が返ってくる
    newArray = produce(array, (copiedArray) => {
    	copiedArray[0].value = changedValue
    })
    
    //元のarrayの変更は回避するやり方②
    //arrayやその0番目の要素を展開してコピーしつつ、変更をする
    newArray = [...array]
    newArray[0] = {
    	...newArray[0]
    	value = changedValue
    }
    

    좋은 웹페이지 즐겨찾기