모든 프런트엔드에 React 구성 요소를 구축하는 방법

13748 단어
간단하게 말하면 내부에서 완전한 맞춤형 알림 시스템을 구축하고 유지하는 것은 고통스러운 일이다.그것은 처음부터 대량의 인력이 필요할 뿐만 아니라, 어느 때에 확장해야 한다는 것은 의심의 여지가 없다.이런 시스템을 유지하면 핵심 임무와 업무 수요에서 개발 시간을 낼 수 있다.
팀에서 알림 시스템 문제에 대한 내부 해결 방안을 구축할 필요가 없도록 하기 위해 우리는 우리의 제품을 조정했다.우리는 React를 사용하여 경량급 해결 방안을 만들었는데 이 해결 방안은 전역적인 상태를 가지고 백엔드에서 독립적으로 운행하기 때문에 팀은 우리의 구성 요소를 보여줄 수 있고 그들의 기술적 축적을 고려하지 않는다.

저희가 맞춤형 택배 부품을 만들었어요.
React는 인기 있는 라이브러리이지만, 모든 사람이 그것을 사용하는 것은 아니며, 미래의 응용이 경쟁사의 전단 구조처럼 광범위하지 않을 수도 있다는 것을 깨달았다.이것이 바로 우리가 사용자 정의 구성 요소를 만들어서 모든 전방 설정과 사용자 인터페이스에서 작업을 할 수 있는 방법을 찾으려는 이유이다.
이 문제를 해결하기 위해 웹 구성 요소에서 영감을 얻을 수 있는 Courier 구성 요소를 React에서 사용자 정의하기로 결정했습니다.Web Components 배후의 생각은 개발자가 맞춤형, 재사용 가능한 요소를 구축할 수 있도록 하고 그 중에서 기능은 코드 라이브러리의 다른 부분에 독립된다는 것이다.
이러한 모듈화 설정은 맞춤형 해결 방안을 어느 곳, 특정한 사용자 인터페이스, 모든 전방 라이브러리나 프레임워크에서 실현할 수 있도록 한다.논리는 다른 코드의 상하문 밖에 존재할 수 있기 때문에, 우리의 구성 요소는 백엔드에서 독립적으로 운행할 수 있다.
초기 설정은 간단합니다.본문에 두 개의 스크립트 표시를 놓습니다. (표시의 순서가 매우 중요합니다.)첫 번째 스크립트 태그에는 사용자 ID와 Courier clientKey 를 사용하여 사용자를 식별할 수 있는 소량의 코드가 포함되어 있습니다.두 번째 스크립트 탭에서 Courier 구성 요소를 다운로드합니다.
<body>
  <section>
    <h1>Hello World</h1>
    <courier-toast></courier-toast>
    <courier-inbox></courier-inbox>
  </section>
  <script type="text/javascript">
    window.courierConfig = {
      clientKey: "{{CLIENT_KEY}}",
      userId: "{{USER_ID}}"
    };
  </script>
  <script src="https://courier-components-xvdza5.s3.amazonaws.com/latest.js"></script>
</body>
다른 구성 옵션을 사용하면 Courier 구성 요소의 초기화를 지연시키고 페이지에 로드된 각 구성 요소의 구성을 매핑할 수 있습니다.현재 불러올 수 있는 두 개의 구성 요소는 토스트와 inbox입니다.
Dell의 SDK는 Windows에서 공개됩니다.비동기적으로 로드됩니다.호출 창.courierAsyncInit는 Courier가 성공적으로 로드되었음을 알려 줍니다.
<script type="text/javascript">
  window.courierAsyncInit = () => {
    console.log("Courier is Ready!");
  };
</script>
모든 구성 요소 (toast와 inbox 구성 요소) 의 논리를 분리하려면 설정 창을 선택할 수 있습니다.courierAsyncInit가 배열로 전송됩니다.
초기화 후 창을 엽니다.courier가 준비되어 있습니다. courier SDK의 동작을 감청할 수 있습니다.소량의 코드를 통해toast 구성 요소를 초기화할 수 있습니다.
<script>
  window.courierAsyncInit = () => {
    window.courier.on("toast/init", () => {
      window.courier.toast({
        title: "Hello",
        body: "World",
      });
    };
  };
</script>
두 가지 방법으로 구성 요소를 구성할 수 있습니다.
인라인 HTML 속성 있음
//inline
<courier-toast auto-close="false"></courier-toast>
창문이 있어요.택배 회사
window.courierConfig = {
 components: {
  toast: {
   autoClose: false,
  }
 }
};
한 구성 요소에 여러 구성 옵션을 사용해야 하는 경우 Windows를 엽니다.courierConfig은 HTML 요소에 너무 많은 속성을 추가할 필요가 없는 기능을 제공합니다.
인라인 구성을 사용하도록 선택한 경우 HTML 속성이 대소문자를 구분하지 않으므로 항상 kebab case에서 서식을 지정해야 합니다.

우리는 React 포털로 상하문을 보존했다
이 구성 요소들을 설치하고 운행하는 것은 매우 쉽다.그러나 우리가 극복해야 할 장애는 모든 구성 요소가 당신이 필요로 하는 데이터에 접근할 수 있도록 확보하는 것이다.이것은 구성 요소의 차원 구조가 어떻든지 간에 프로젝트의 어느 곳에서든 발생해야 한다.우리는 React ContextReact Portals를 사용하여 DOM의 모든 위치에서 어셈블리를 주입합니다.
만약 React 상하문과 React 포털에 익숙하지 않다면, 여기에 간략한 소개가 있습니다.

반응 어경
위아래 문장은 트리 구조를 현저하게 처리하지 않고 구성 요소 사이에서 도구를 전달할 수 있습니다.이것은 사용자 인터페이스의 수요가 어떻든지 간에 데이터에 쉽게 접근할 수 있게 한다.결과적으로 필요한 데이터를 포함하는 부모 구성 요소의 중첩 단계를 제외한 하위 구성 요소는 전역 데이터에 접근할 수 있습니다.

반응 포털
포털을 사용하면 부모 노드가 표준 네스트된 구조 외부에 있더라도 DOM의 모든 위치에 서브노드를 배치할 수 있습니다.DOM 트리에 포털을 임의로 배치할 수 있어도 포털은 React 트리에서 컨텍스트를 유지합니다.이것은 거품이 생기는 등 사건이 여전히 정상적으로 운행될 것이라는 것을 의미한다.

이 모든 것을 함께 놓아라
Courier가 초기화된 후에 HTML을 분석하고 동적으로 가져올 구성 요소를 찾아서 사용하지 않은 추가 구성 요소를 다운로드하지 않도록 합니다.HTML 태그로 인식한 다음 Courier SDK의 컨텍스트에 표시합니다.이렇게 하면, 우리는 DOM에서 필요한 모든 곳에서 그들이 필요로 하는 Courier 상하문에서 그것들을 나타낼 수 있다.
따라서 React 컨텍스트와 React 포털의 조합을 통해 Courier 구성 요소가 의존하는 전역 상태를 유지합니다.우리의toast와 inbox 구성 요소는 하나의 포털에 나타납니다. 포털은 이 구성 요소를 부모 차원 구조 이외의 하위 단계로 허용합니다.따라서 Google Courier 구성 요소를 공식 DOM 트리 이외의 모든 항목으로 표시할 수 있습니다.

우리 는 지혜 가 풍부하고 계략적 으로 해결 방안 을 하나 포장했다
우리는 코드 팽창을 추가하러 온 것이 아니다.우리는 가능한 한 작은 통합을 확보하기 위해 목적지에서 해결 방안을 찾았다.
현재 Toast 메시지와 수신함 두 개의 구성 요소를 보여 줍니다.우리는 라이브러리의 크기가 매우 중요하다는 것을 깨달았다. 비록 어떤 사람들은 이 두 구성 요소를 집적해야 한다고 생각할 수도 있지만, 다른 사람들은 하나만 집적하려고 할 수도 있다.우리는 또한 미래에 더 많은 구성 요소를 추가할 계획이기 때문에 모든 내용이 아니라 필요한 내용을 동적으로 불러오는 것이 중요하다.
필요한 구성 요소의 자동 다운로드를 처리하기 위해 소량의 코드를 제공함으로써 프로젝트가 가능한 한 작고 경량급일 수 있도록 합니다.코드를 로드할 때 HTML을 분석하여 필요한 구성 요소를 확인합니다.이 구성 요소들은 동적으로 불러오고 캐시됩니다.이렇게 하면 후속 렌더링에서 코드가 새로 고쳐지지 않습니다.
우리는 React Suspense로 이 일을 하는데, 그것은 완전히 그가 말한 대로 한다.조건이 충족될 때까지 React 어셈블리의 렌더링을 일시 중지합니다.다음 예시에서, 우리가 만든 포털은toast 구성 요소가 설정되었는지 기다리고 있습니다.있다면, 우리는 그것을 불러올 것이다.
import React, { lazy, Suspense } from "react";

const toastElement = document.querySelector("courier-toast") ?? undefined;
const toastConfig = {
  ...componentConfigs?.toast,
  ...getAttrsAsJson(toastElement)
};

<CourierSdk
  activeComponents={{
    toast: Boolean(toastElement)
  }}
>
  {toastElement &&
    ReactDOM.createPortal(
      <Suspense fallback={<div />}>
        <Toast config={toastConfig} />
      </Suspense>,
      toastElement
    )}
</CourierSdk>;
어셈블리에 렌더링이 필요한 경우 비동기적으로 렌더링할 수 있습니다.이러한 실현 방법은 앞으로 동적 가져올 수 있는 새로운 구성 요소를 추가해서 확장할 수 있도록 한다.
동적 가져온 구성 요소 외에 우리는 Preact를 사용하여 패키지의 소형화를 유지한다.Preact는 React와 같은 ES6 API를 사용하지만, Preact는 더 경량급으로 더 빠르고 얇은 가상 DOM을 탑재할 수 있다.우리는 이 실현을 정성껏 구축했는데, 이렇게 하면 Preact가 React의 모든 실례를 완전히 교체할 수 있다.
환매 협의here를 볼 수 있습니다.

너 혼자 해봐.
Courier는 개발자가 정확한 시간에 정확한 정보를 정확한 사용자에게 전달할 수 있도록 한다.Courier의 전체 제품에 대한 자세한 내용과 제품을 통합하는 방법에 대한 자세한 내용은 Delldocs과 DellAPI을 참조하십시오.

좋은 웹페이지 즐겨찾기