Javascript 및 React의 불변성

React는 동적 사용자 인터페이스를 구축하기 위한 유명한 라이브러리입니다. 데이터 불변성은 함수형 프로그래밍 에서 나온 아이디어 이며 프런트 엔드 앱 디자인에 적용하면 많은 이점을 얻을 수 있습니다.

데이터 돌연변이란 무엇입니까?
데이터 변형에 대한 아이디어를 이해하려면 프로그래밍의 기초로 돌아가 자바스크립트에서 데이터 구조 를 비교할 수 있는 방법을 이해해야 합니다 . 기본 유형을 비교하는 것은 매우 쉽습니다.

let num1 = 10,
    num2 = 10;
num1 === num2; // true

let obj1 = { name: "Pragati", lname: "Garud" },
    obj2 = { name: "Pragati", lname: "Garud" };
obj1 === obj2; // false

let obj1 = { name: "Pragati", lname: "Garud" },
    obj2 = obj1;
obj1 === obj2; // true

obj1.name = "unknown";
console.log(obj1.name); // unknown
console.log(obj2.name); // unknown

요컨대, 기본이 아닌 경우 ==와 ===연산자의 비교 변수가 참조됩니다. 값으로 비교할 수도 있지만 복잡한 데이터 구조에서는 깊은 동등성 검사 라고 하는 여러 개의 동등성 검사가 필요 합니다.

let obj1 = { name: "Pragati", lname: "Garud" },
    obj2 = { name: "Pragati", lname: "Garud" };
valueCompare(obj1, obj2); //true

// Input: obj1 and obj2
// Output: true if obj1 is equal to obj2 in terms of values
function valueCompare(obj1, obj2) {
   const keys1 = list of keys of obj1;
   const keys2 = list of keys of obj2;
   if (keys1.lenth !== keys2.length) return false;
   for each key in keys1: 
      if (key is not present in keys2) 
         return false;
      if (typeOf(keys1[key] != typeOf(keys2[key]))
         return false;
      if (keys1[key] is a primitive && keys1[key] !== keys2[key])
         return false;
      if (obj1[key] is non primitive):
         isEqual = valueCompare(obj1[key], obj2[key]);
         if(!isEqual) return false;
}

let obj3 = Object.assign({}, obj1, { name: "unknown" });
obj3 === obj1; //false

2] [].concat() : [].concat()변경할 수 없는 방식으로 배열 값을 변경하는 데 사용할 수 있습니다 .

let numbers = [10, 20, 30];
numbers[1] = 22; // This will not change reference to an array
// Instead what you can do copy list and perform update as below
let numbers = [10, 20, 30];
let changedNumbers = [].concat(numbers);
changedNumbers[1] = 22;
changedNumbers === numbers; // false

상태가 복잡한 경우(중첩된 개체 포함) 상태가 변경되었는지 여부를 확인하기 어렵습니다. 참조 동등성을 사용하여 객체를 비교할 때 다음 상태가 변경되었는지 여부를 확신할 수 없고 깊은 동등성 검사는 재렌더링 시간에 비해 더 많은 시간이 걸리기 때문에 심층 동등성 검사를 수행해야 합니다. 따라서 React는 상태 변경 비교 대신 모든 setState 호출에서 구성 요소를 다시 렌더링하는 것을 선호합니다.

상태를 최소화하는 것은 React의 모범 사례입니다.

감사 해요! 이 글이 도움이 되었으면 합니다 :)

Suggested posts

뇌졸중의 치명적인 결과 피하기: 가족의 여정에서 배우기 .

뇌졸중의 치명적인 결과 피하기: 가족의 여정에서 배우기 .

머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.

내가 가장 많이 사용하는 코딩 리소스

내가 가장 많이 사용하는 코딩 리소스

이번 주에 저는 일일 이메일 목록의 회원으로부터 이메일을 받았습니다. 그들은 알고 싶어했습니다. 매일, 매주, 매월 어떤 리소스를 방문합니까? 좋은 질문입니다! 제 작업 흐름과 제가 사용하는 주요 리소스에 대한 통찰력을 공유하게 되어 기쁩니다.

Related posts

대명사는 정말 무섭다

너무 자주 그렇듯 갑자기 와닿는다 다시 중간쯤이야 <아니, 태평양에 있는 사람 말고 마룬, 카니발에 있는 사람> 모든 헤드라인이 시끄러워…..

위협 사냥을 위한 OSINT 수집

위협 사냥을 위한 OSINT 수집

안녕하세요, 사이버 애호가 여러분! 위협 사냥 시리즈에 대한 OSINT에 다시 오신 것을 환영합니다. 첫 번째 기사에서는 OSINT에 대한 개요와 위협 사냥에서의 중요성에 대해 설명했습니다.

그 위협 아카이브: Vol 7 블랙 바스타

그 위협 아카이브: Vol 7 블랙 바스타

오늘날의 상호 연결된 세계에서 사이버 공격의 위협은 그 어느 때보다 만연해 있습니다. 사이버 범죄자와 국가 행위자는 지속적으로 취약점을 악용하고 귀중한 데이터를 도용하여 모든 규모의 조직에 상당한 위험을 초래합니다.

무한한 삶

당신이 자라면 세상은 있는 그대로이고 당신의 삶은 단지 세상 안에서 당신의 삶을 사는 것이며, 결코 당신의 생명을 위험에 빠뜨리지 않고, 정해진 길을 따르고 결국 죽고, 벽을 너무 세게 치세요.하지만 그것은 매우 제한된 삶입니다.