목차
Hello! {this.state.name}
Hello! {props.name}
{props.name}
Hi! I'm being rendered at: {this.state.path}
The count is: {state.count}
웹 프론트엔드 JS 튜토리얼 React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

Feb 21, 2019 pm 05:45 PM
javascript react.js 프런트 엔드 프로그램 제작자

이 글은 React 컴포넌트 패턴에 대한 자세한 소개를 제공합니다(예제 포함). 필요한 친구들이 참고할 수 있기를 바랍니다.

구성 요소는 React의 핵심이므로 이를 활용하는 방법을 아는 것은 훌륭한 디자인 구조를 만드는 데 중요합니다.

컴포넌트란 무엇입니까

React 공식 웹사이트에 따르면 "컴포넌트는 UI를 독립적이고 재사용 가능한 부분으로 분할하고 각 부분을 독립적으로 관리할 수 있게 해줍니다."

처음 npm install을 설치하면 반응을 보게 됩니다. 한 가지는 구성 요소와 해당 API입니다. JavaScript 함수와 유사하게 구성 요소는 "props"라는 입력을 받아들이고 사용자 인터페이스(UI)의 모양을 설명(선언)하는 React 요소를 반환합니다. 이것이 바로 React가 선언적 API라고 불리는 이유입니다. 원하는 UI 모양을 지정하면 React가 나머지를 처리하기 때문입니다.

선언적 스타일은 택시를 타고 목적지까지 갈 때

라고 생각하면 됩니다. 운전사에게 어디로 가야 할지 알려주기만 하면 운전사가 그곳까지 운전해 줄 것입니다. 명령형 프로그래밍은 그 반대입니다. 직접 운전해서 가야 합니다.

Component API

React를 설치한 후 React에서 제공하는 API를 사용할 수 있는데, 기본적으로 5가지 종류로 나눌 수 있습니다.

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

  • render

  • state

  • props

  • context

  • lifecycle events

API 위에 있지만 일반적으로 구성 요소는 일부 API와 기타 구성 요소는 다른 API만 사용합니다.

다양한 API를 사용하여 구성 요소를 stateful 구성 요소와 stateless 구성 요소로 나눌 수 있습니다.

  • Stateful 구성 요소는 일반적으로 API를 사용합니다: 렌더링, 상태 및 수명 주기 관련 이벤트.

  • 상태 비저장 구성 요소는 일반적으로 API(렌더링, 소품 및 컨텍스트)를 사용합니다.

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

이것이 우리가 컴포넌트 패턴을 소개하려는 이유입니다. 컴포넌트 패턴은 React를 사용할 때 가장 좋은 방법입니다. 컴포넌트 패턴은 원래 데이터 로직과 UI 프리젠테이션 레이어를 분리하기 위해 도입되었습니다. 구성 요소 간에 책임을 나누면 복잡한 UI를 구성하는 데 사용할 수 있는 보다 재사용 가능하고 응집력 있는 구성 요소를 만들 수 있습니다. 이는 확장 가능한 애플리케이션을 구축할 때 특히 중요합니다.

컴포넌트 패턴

일반적으로 다음과 같은 컴포넌트 패턴이 있습니다:

  • Container(컨테이너 컴포넌트)

  • Presentational(프레젠테이션 컴포넌트)

  • Higher order 컴포넌트(고급 컴포넌트)

  • 렌더링 콜백(렌더링 콜백)

Container(컨테이너 구성 요소)

"컨테이너 구성 요소는 데이터를 가져온 다음 하위 구성 요소를 렌더링합니다." - Jason Bonta

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

컨테이너 구성 요소는 데이터 또는 논리입니다. 레이어 및 수명 주기 이벤트를 사용하여 상태 저장 API를 사용하면 상태를
redux 또는 Flux 저장소에 연결하고 데이터 및 콜백을 하위 구성 요소에 props로 전달할 수 있습니다.

컨테이너 컴포넌트의 렌더링 메소드에서 디스플레이 컴포넌트를 사용하여 특정 스타일을 렌더링할 수 있습니다. 모든 상태 API에 액세스하려면 컨테이너 구성 요소를 함수형 메서드를 사용하는 대신 클래스로 선언해야 합니다.

아래 예에는 상태, 수명 주기 이벤트 componentDidMount() 및 렌더링 메서드가 있는 Greeting이라는 클래스 구성 요소가 있습니다.

class Greeting extends React.Component {
  constructor() {
    super();
    this.state = {
      name: "",
    };
  }

  componentDidMount() {
    // AJAX
    this.setState(() => {
      return {
        name: "William",
      };
    });
  }

  render() {
    return (
      <div>
        <h1 id="Hello-this-state-name">Hello! {this.state.name}</h1>
      </div>
    );
  }
}
로그인 후 복사

이때, Greeting 컴포넌트를 컨테이너 컴포넌트로 만들기 위해 UI를 디스플레이 컴포넌트로 나눌 수 있습니다. 이에 대해서는 아래에서 설명하겠습니다.

Display 컴포넌트

Display 컴포넌트는 props, render, context(stateless API)를 사용하며, 라이프사이클 관련 API를 사용할 필요가 없기 때문에 순수 함수를 사용하여 표현을 단순화할 수 있습니다:

const GreetingCard = (props) => {
  return (
    <div>
      <h1 id="Hello-props-name">Hello! {props.name}</h1>
    </div>
  )
}
로그인 후 복사

Display 컴포넌트 props에서만 시작됩니다. 컨테이너 구성 요소(상위 구성 요소)에서 제공할 수 있는 데이터와 콜백을 받습니다.

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

컨테이너 구성 요소와 프레젠테이션 구성 요소는 각각 데이터/논리 및 프레젠테이션 부분을 해당 구성 요소로 캡슐화합니다.

const GreetingCard = (props) => {
  return (
    <div>
      <h1 id="props-name">{props.name}</h1>
    </div>
  )
}

class Greeting extends React.Component {
  constructor() {
    super();
    this.state = {
      name: "",
    };
  }

  componentDidMount() {
    // AJAX
    this.setState(() => {
      return {
        name: "William",
      };
    });
  }

  render() {
    return (
      <div>
       <greetingcard></greetingcard>
      </div>
    );
  }
}
로그인 후 복사

如你所见,已经将 Greeting 组件中展示相关的部分移动到了它自己的函数式展示组件中。当然,这是一个非常简单的例子——对于更复杂的应用程序,这也是最基本的。

高阶组件

高阶组件是一种函数,它接受一个组件作为参数,然后返回一个新的组件。

这是一种可以对输入组件的 props 进行修改(增删改查)然后返回全新的修改后的组件强大模式,想想 react-router-v4 和 redux 。用了 react-router-v4 后,你可以使用 withRouter() 来继承以 props 形式传递给组件的各种方法。同样,用了redux,就可以使用 connect({})() 方法来将展示组件和 store 中的数据进行连接。

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

代码演示:

import {withRouter} from 'react-router-dom';
class App extends React.Component {
  constructor() {
    super();
    this.state = {path: ''}
  }
  
  componentDidMount() {
    let pathName = this.props.location.pathname;
    this.setState(() => {
      return {
        path: pathName,
      }
    })
  }
  
  render() {
    return (
      <div>
        <h1 id="Hi-I-m-being-rendered-at-this-state-path">Hi! I'm being rendered at: {this.state.path}</h1>
      </div>
    )
  }
}

export default withRouter(App);
로그인 후 복사

导出组件时,使用用 react-router-v4 的 withRouter()方法封装它。 在 组件 App 的生命周期事件 componentDidMount() 方法中,我们使用this.props.location.pathname 提供的值来更新 state。 由于我们使用了 withRouter 高阶组件,我们可以直接访问 this.props.locationlocation,而不需要直接将 location 作为 props 直接传入,非常方便。

渲染回调

与高阶组件类似,渲染回调或渲染 props 被用于共享或重用组件逻辑。虽然许多开发人员倾向于使用 高阶组件 的可重用逻辑,但是使用 渲染回调 仍然有一些非常好的理由和优势——这是在 Michael Jackson 的“永不写另一个高阶组件”中得到了最好的解释。简而言之,渲染回调减少了命名空间冲突,并更好的说明了逻辑来源。

React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0,
    };
  }

  increment = () => {
    this.setState(prevState => {
      return {
        count: prevState.count + 1,
      };
    });
  };

  render() {
    return (
      <div>{this.props.children(this.state)}</div>
    );
  }
}

class App extends React.Component {
  render() {
    return (
      <counter>
        {state => (
          <div>
            <h1 id="The-count-is-state-count">The count is: {state.count}</h1>
          </div>
        )}
      </counter>
    );
  }
}
로그인 후 복사

在 Counter 类中,在 render 方法中嵌入 this.props.children 并将 this.state 作为参数。在 App 类中,我们可以将我们组件封装在 Counter 组件中,因此我可以操作 Counter 组件内的逻辑。

Counter 组件的本质是暴露了 children 这个外部属性,将 children 具体的渲染细节交个 Counter 的使用者,使用的时候只需要将组件传入到 Counter 的 children 中,当然可以使用其他参数,如果 children 不够的话。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

위 내용은 React 컴포넌트 패턴에 대한 자세한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

최고의 AI 프로그래머는 누구일까요? Devin, Tongyi Lingma 및 SWE 에이전트의 잠재력을 살펴보세요. 최고의 AI 프로그래머는 누구일까요? Devin, Tongyi Lingma 및 SWE 에이전트의 잠재력을 살펴보세요. Apr 07, 2024 am 09:10 AM

세계 최초의 AI 프로그래머 데빈(Devin)이 태어난 지 한 달도 채 안 된 2022년 3월 3일, 프린스턴 대학의 NLP팀은 오픈소스 AI 프로그래머 SWE-에이전트를 개발했습니다. GPT-4 모델을 활용하여 GitHub 리포지토리의 문제를 자동으로 해결합니다. SWE-bench 테스트 세트에서 SWE-agent의 성능은 Devin과 유사하며 평균 93초가 걸리고 문제의 12.29%를 해결합니다. SWE-agent는 전용 터미널과 상호 작용하여 파일 내용을 열고 검색하고, 자동 구문 검사를 사용하고, 특정 줄을 편집하고, 테스트를 작성 및 실행할 수 있습니다. (참고: 위 내용은 원문 내용을 약간 조정한 것이지만 원문의 핵심 정보는 그대로 유지되며 지정된 단어 수 제한을 초과하지 않습니다.) SWE-A

PHP와 Vue: 프런트엔드 개발 도구의 완벽한 조합 PHP와 Vue: 프런트엔드 개발 도구의 완벽한 조합 Mar 16, 2024 pm 12:09 PM

PHP와 Vue: 프론트엔드 개발 도구의 완벽한 조합 오늘날 인터넷이 빠르게 발전하는 시대에 프론트엔드 개발은 점점 더 중요해지고 있습니다. 사용자가 웹 사이트 및 애플리케이션 경험에 대한 요구 사항이 점점 더 높아짐에 따라 프런트 엔드 개발자는 보다 효율적이고 유연한 도구를 사용하여 반응형 및 대화형 인터페이스를 만들어야 합니다. 프론트엔드 개발 분야의 두 가지 중요한 기술인 PHP와 Vue.js는 함께 사용하면 완벽한 도구라고 볼 수 있습니다. 이 기사에서는 독자가 이 두 가지를 더 잘 이해하고 적용할 수 있도록 PHP와 Vue의 조합과 자세한 코드 예제를 살펴보겠습니다.

C 언어의 매력을 밝히다: 프로그래머의 잠재력을 발견하다 C 언어의 매력을 밝히다: 프로그래머의 잠재력을 발견하다 Feb 24, 2024 pm 11:21 PM

C 언어 학습의 매력: 프로그래머의 잠재력을 여는 것 지속적인 기술 발전으로 컴퓨터 프로그래밍은 많은 주목을 받는 분야가 되었습니다. 많은 프로그래밍 언어 중에서 C 언어는 항상 프로그래머들에게 사랑을 받아 왔습니다. C 언어의 단순성, 효율성 및 폭넓은 적용 덕분에 많은 사람들이 프로그래밍 분야에 입문하는 첫 번째 단계는 C 언어입니다. 이 기사에서는 C 언어 학습의 매력과 C 언어 학습을 통해 프로그래머의 잠재력을 발휘하는 방법에 대해 설명합니다. 우선, C 언어 학습의 매력은 단순함에 있습니다. C언어는 다른 프로그래밍 언어에 비해

프론트엔드 면접관이 자주 묻는 질문 프론트엔드 면접관이 자주 묻는 질문 Mar 19, 2024 pm 02:24 PM

프론트엔드 개발 인터뷰에서 일반적인 질문은 HTML/CSS 기초, JavaScript 기초, 프레임워크 및 라이브러리, 프로젝트 경험, 알고리즘 및 데이터 구조, 성능 최적화, 크로스 도메인 요청, 프론트엔드 엔지니어링, 디자인 패턴, 새로운 기술 및 트렌드. 면접관 질문은 후보자의 기술적 능력, 프로젝트 경험, 업계 동향에 대한 이해를 평가하기 위해 고안되었습니다. 따라서 지원자는 자신의 능력과 전문성을 입증할 수 있도록 해당 분야에 대한 충분한 준비를 갖추어야 합니다.

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

Django는 프론트엔드인가요, 백엔드인가요? 확인 해봐! Django는 프론트엔드인가요, 백엔드인가요? 확인 해봐! Jan 19, 2024 am 08:37 AM

Django는 빠른 개발과 깔끔한 ​​방법을 강조하는 Python으로 작성된 웹 애플리케이션 프레임워크입니다. Django는 웹 프레임워크이지만 Django가 프런트엔드인지 백엔드인지에 대한 질문에 답하려면 프런트엔드와 백엔드의 개념에 대한 깊은 이해가 필요합니다. 프론트엔드는 사용자가 직접 상호작용하는 인터페이스를 의미하고, 백엔드는 HTTP 프로토콜을 통해 데이터와 상호작용하는 서버측 프로그램을 의미합니다. 프론트엔드와 백엔드가 분리되면 프론트엔드와 백엔드 프로그램을 독립적으로 개발하여 각각 비즈니스 로직과 인터랙티브 효과, 데이터 교환을 구현할 수 있습니다.

Go 언어 프런트엔드 기술 탐색: 프런트엔드 개발을 위한 새로운 비전 Go 언어 프런트엔드 기술 탐색: 프런트엔드 개발을 위한 새로운 비전 Mar 28, 2024 pm 01:06 PM

빠르고 효율적인 프로그래밍 언어인 Go 언어는 백엔드 개발 분야에서 널리 사용됩니다. 그러나 Go 언어를 프런트엔드 개발과 연관시키는 사람은 거의 없습니다. 실제로 프런트엔드 개발에 Go 언어를 사용하면 효율성이 향상될 뿐만 아니라 개발자에게 새로운 지평을 열어줄 수도 있습니다. 이 기사에서는 프런트엔드 개발에 Go 언어를 사용할 수 있는 가능성을 살펴보고 독자가 이 영역을 더 잘 이해할 수 있도록 구체적인 코드 예제를 제공합니다. 전통적인 프런트엔드 개발에서는 사용자 인터페이스를 구축하기 위해 JavaScript, HTML, CSS를 사용하는 경우가 많습니다.

Django: 프론트엔드와 백엔드 개발을 모두 처리할 수 있는 마법의 프레임워크! Django: 프론트엔드와 백엔드 개발을 모두 처리할 수 있는 마법의 프레임워크! Jan 19, 2024 am 08:52 AM

Django: 프론트엔드와 백엔드 개발을 모두 처리할 수 있는 마법의 프레임워크! Django는 효율적이고 확장 가능한 웹 애플리케이션 프레임워크입니다. MVC, MTV를 포함한 다양한 웹 개발 모델을 지원할 수 있으며 고품질 웹 애플리케이션을 쉽게 개발할 수 있습니다. Django는 백엔드 개발을 지원할 뿐만 아니라 프런트엔드 인터페이스를 빠르게 구축하고 템플릿 언어를 통해 유연한 뷰 표시를 구현할 수 있습니다. Django는 프론트엔드 개발과 백엔드 개발을 완벽한 통합으로 결합하므로 개발자가 전문적으로 학습할 필요가 없습니다.

See all articles