on
React , 조건부 렌더링: 피할 수 있는 '애플리케이션 내 고통'입니다.
React , 조건부 렌더링: 피할 수 있는 '애플리케이션 내 고통'입니다.
반응형
여러분은 이미 알고 계실 겁니다. 이 주제는 가장 못생긴 것에 대한 것입니다.
재사용 가능한 UI 구성 요소를 만드는 Facebook의 공식 도구인 React는 UI의 작은 블록의 웨어하우스뿐만 아니라 거의 모든 웹을 포괄하는 프레임워크 지향 라이브러리로서의 유연성 덕분에 선두를 달리고 있습니다.
라우팅 메커니즘이 있는 SPA 접근 방식을 채택한다면 이는 React의 Virtual DOM이 제공하는 모든 것을 포괄적으로 의존한다는 것을 이미 알고 있을 것입니다. 대부분의 구성요소는 경로 및/또는 내부 데이터에 따라 렌더링됩니다.
이 경우, High Order 구성 요소( Module 이라고 함)를 경로에 연결하는 방법은 매우 부드러운 만족 메커니즘입니다. 큰 "애플리케이션 내 고통"을 처리할 필요가 없는 일종의 구성 요소 지향 스위치/케이스입니다. 경로로 이동하면 해당 경로와 연결된 모듈이 마법처럼 조건부로 렌더링됩니다.
그러나 라우터 지향적이 아닌 다른 Lower Order 구성 요소와 데이터 지향에 기초하여 구축된 모듈 내부의 조건부 렌더링을 관리하는 것은 어떨까요?
if/else, switch/case, Elvis operator와 같은 고전적인 방법을 사용하는 것 외에는 이 문제를 해결할 수 있는 큰 선택권이 없다고 생각합니다. 일부는 이 사용 사례를 더 자세히 살펴보고 구성 요소를 렌더링할지 여부를 나타내는 소품을 요구하여 조건부로 렌더링하는 HOC를 사용하여 이 문제를 처리하려고 합니다. 그러나 이 기능은 JSX 코드에 괄호를 붙이지 않는 데만 유용합니다. 다 됐다! 더 이상 어쩔 수 없다!
이 기사에 대한 환상의 부분은, 만약 우리가 이 모든 것을 할 필요가 없다면 어떨까? 만약 우리가 이것에 대해 걱정할 필요가 없다면요? React 자체가 조건부 렌더링을 처리하는 계층이라면 어떨까요?
Back to Basics: React는 무대 뒤에서 일하나요?
React 구성 요소를 작성하는 방법에는 JSX 또는 CreateElement를 사용하는 두 가지가 있습니다.
JSX를 사용하면 알다시피 마지막에 CreateElement 형식으로 전환됩니다. 하지만 CreateElement 상태와 Respect Virtual DOM 사이에 실제로 어떤 일이 벌어지고 있습니까?
console.log() React 구성 요소를 JSX 또는 CreateElement 형식으로 console.log하면 다음과 같은 결과를 얻을 수 있습니다.
{ $$typeof: Symbol(react.element), key: null, props: {children: "My Component Children"}, ref: null, type: "h1" }
키가 익숙해 보이는 javascript 개체: 유형 키는 CreateElement 함수의 첫 번째 매개 변수(JSX의 태그 이름 참조), 프로프 키 및 기타 두 개의 키, 키
이 기사에서는 개발자에게 Respect DOM의 작업량을 줄일 수 있도록 지원하는 "키" 프롭과 키를 구성 요소에 할당하여 성능을 확장할 수 있도록 지원하는 프롭에 초점을 맞출 것입니다. 이러한 방식으로 React DOM이 실제 가상 DOM과 업데이트된 가상 DOM을 비교하기 시작하면 동일한 상태를 유지했던 동일한 키로 구성 요소를 다시 렌더링할 필요가 없습니다. React DOM 생태계에서 놀라운 변화입니다.
React DOM은 가상 DOM에서 주로 키 프로펠트를 기반으로 부록을 관리합니다. 가장 이상적인 사용 방법은 React와 React DOM이 가장 깔끔한 작업을 할 수 있도록 돕는 것입니다. 많은 열쇠들.. 이는 React 사용자에게 아직 일반적인 관행이 아닙니다.
React에서 조건부 렌더링 해결을 고무할 수 있는 핵심 소품은 무엇입니까?
열쇠를 제공하지 않는 React 생태계의 실제 상태는 그다지 나쁘지 않다는 것은 분명하다. 이 구성 요소가 실제로 변경되지 않았더라도 React DOM이 구성 요소를 다시 렌더링하도록 강제할 뿐입니다. 그러나 키 프로펠러 경계는 추가된 요소가 이전 가상 DOM 상태와 동일한 내용을 가질지 아니면 이전과 다르거나 이전과 동일한 새로운 컨텐츠로 다시 렌더링해야 하는지 여부(키 프로펠러를 잘 사용하지 않는 경우)만 결정하는 것입니다. 따라서 모든 경우에 React DOM은 항상 컨텐츠를 다른 컨텐츠로 교체하고 존재하지 않는 새로운 컨텐츠를 생성하며 기존 컨텐츠와 동일한 컨텐츠를 유지하지만, 이 컨텐츠가 코드 쪽의 조건부 렌더링과 관련이 없는 한 이전 컨텐츠는 삭제하지 않습니다.
생명을 구할 수 있는 새로운 React 내부 소품
이 레벨에서 이론적으로 가장 좋은 솔루션은 키와 레퍼런스 같은 내부 프로펠트를 추가하는 것입니다. 예를 들어, 이를 "부속"이라고 부르겠습니다. 기본적으로 참이 적용되며 사용자는 렌더링 조건으로 이를 재정의할 수 있습니다. 이 경우 React DOM은 키 프로펠러뿐만 아니라 추가 프로펠러에 기반하여 트리 컴패런을 만듭니다. 이 조합을 사용하면, 먼저 추가 프로프가 거짓일 경우(보통 두 트리 개체 간의 차이점에 관계 없이 개체를 죽이는 것) 수행할 작업을 결정하고, 추가가 참일 경우 정상적으로 수행해야 하는 작업을 수행합니다.
이러한 기능이 React DOM 성능에 어떤 영향을 미칠 수 있는지 알고 싶습니다. 댄 아브라모프에게 핑을 칩시다!
from http://it-ground.tistory.com/336 by ccl(A) rewrite - 2021-10-19 06:28:10