React 구성 요소를 작성하는 방법은 무엇입니까? (암호)
이 글의 내용은 React 컴포넌트를 작성하는 방법에 관한 것입니다. (코드), 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
React 구성 요소 작성 방법
React 세계에서는 일반적으로 class
를 사용하여 예, React.Component
에서 상속되어야 합니다.
예를 들어 다음 코드는 class
来声明一个组件的,它必须继承自React.Component
。
例如下面的代码:
// MyFirstComponent.jsx class MyFirstComponent extends React.Component { state = { text: "Hello React" }; /** 组件生命周期钩子函数:在组件挂载完成后立即被调用 */ componentDidMount() { alert("组件挂载完成!"); } render() { return ( <p>{this.state.text}, I am {this.props.author}!</p> ) } } export default MyFirstComponent;
// index.js import MyFirstComponent from "MyFirstComponent"; /** 渲染结果:<p>Hello React, I am Shaye!</p> */ ReactDOM.render(<MyFirstComponent author="Shaye"></MyFirstComponent>, document.getElementById("app"));
以上就是一个常规的React组件编写方式,不过我们还可以通过观察上面的代码,发现几个有趣的地方:
MyFirstComponent
中有一个函数componentDidMount
是组件生命周期钩子函数。实际上React为组件设计了一系列的生命周期钩子函数MyFirstComponent
中有一个特别的函数render()
,这个函数把类似html
的模板内容jsx
作为返回值。这是一个必须定义的函数,否则React
将抛出错误jsx
乍看之下像是一种模板引擎,实际上是一种JavaScript
的语法扩展,它的核心理念就是著名的all in js
,它完全是在JavaScript
内部实现的,它和传统的模板引擎一样,也可以绑定js
表达式jsx
绑定的数据可以很明显地看出来自两个对象:this.state
和this.props
;this.state
是MyFirstComponent
内部自定义的组件状态;this.props
是外部凭借标签属性的形式传进MyFirstComponent
内部的数据,类似于函数的传参;
总结来说,当你掌握了 组件生命周期 JSX 组件状态state 组件属性props ,你就知道该如何编写React组件了。
组件生命周期
官方文档已经有非常详尽的介绍,这里不再赘述,请点击这里查看组件生命周期的官方文档。
JSX
你可以任意地在JSX
当中使用javaScript
表达式,在JSX
当中的表达式要包含在大括号里。
例如下面的代码:
<p className={this.state.clname} style={{ fontSize: "20px" }}>{this.state.content} forever</p>
JSX
里的React元素,比如p
,最终都会被编译器转译,被某些特定函数处理变成一个轻量的javascript object
。比如上面提到的元素p
最终会变成如下的object
:
// 注意: 以下示例是简化过的(不代表在 React 源码中是这样) const pElement = { type: "p", props: { // this.state.clname的值 className: "love", style: { fontSize: "20px" }, // "you"为this.state.content的值 children: ["you", "forever"] } }
React就是通过读取这些对象来操作DOM
并保持数据内容一致。所以,实际上你依然在写js
。所以,class
和style
必须使用在js
中的写法
比如:class
=> className
再比如:font-size: 20px;
=> { fontSize: "20px" }
特别地,React元素的属性仍然可以像原生html
一样使用引号来定义以字符串为值的属性,例如:className="my-claname"
除了以上所提,JSX
的事件绑定与原生html
也有一些语法上的不同:
React的事件命名采用驼峰式写法,而不是小写。
React事件绑定的必须是一个函数对象,不能是字符串。
代码示例:
<p onClick={this.handleClick}>我是一个按钮</p> // 也可以向事件回调函数传递参数 <p onClick={(params) => this.handleClick(params)}>我是一个按钮</p>
组件状态state
state
是私有的,完全受控于当前组件。既然是状态,那么就会有更新的需求,如何更新呢?
代码示例:
// 对`this.state`或者它的属性直接`=`赋值,将永远不会触发组件渲染,必须使用`setState()` // 在组件的生命周期钩子函数中调用this.setState() componentDidMount() { this.setState({ content: "lalalala" }) } // 在组件的自定义函数中调用this.setState() handleClick = () => { this.setState({ content: "uauauaua" }) }
setState()
是React中唯一一个动态更新组件的途径,当它被调用之后,自身组件以它的所有子组件都将触发重渲染
特别地,state
同样也可以作为属性传递给子组件;setState()
详细文档
组件属性props
props
是父组件传递下来的数据,一般是来自父组件的state
或者组件的其他成员变量。并且,props
是只读的,组件永远无法修改自己的props
。只有在父组件调用setState()
之后才能使子组件的属性发生变化并重新渲染。props
只能从上往下传,组件也只能修改自身私有的state
rrreeerrreee위는 React 구성 요소를 작성하는 일반적인 방법이지만 위 코드를 관찰하면 몇 가지 흥미로운 점을 찾을 수도 있습니다.
MyFirstComponent
에 컴포넌트 라이프사이클 후크 함수인 comComponentDidMount
함수가 있습니다. 실제로 React는 컴포넌트
MyFirstComponent
에 render() /code>, 이 함수는 <code>html
과 유사한 템플릿 콘텐츠 jsx
를 반환 값으로 사용합니다. 이는 정의해야 하는 함수입니다. 그렇지 않으면 React
에서 오류가 발생합니다 jsx
얼핏 보면 이렇게 보입니다. 템플릿 엔진은 실제로 JavaScript
의 구문 확장입니다. 핵심 개념은 완전히 JavaScript
를 기반으로 하는 유명한 all in js
입니다. code>는 기존 템플릿 엔진과 마찬가지로 js
표현식 #🎜🎜#jsx
바인딩된 데이터를 바인딩할 수도 있습니다. 두 개체인 this.state
와 this.props
에서 나온 것으로 명확하게 볼 수 있습니다. this.state
는 MyFirstComponent입니다. >의 내부 사용자 정의 구성요소 상태; this.props
는 참조 #🎜🎜#를 전달한 함수와 유사하게 레이블 속성 형식으로 MyFirstComponent
에 전달된 외부 데이터입니다. JSX
에서 javaScript
표현식을 마음대로 사용할 수 있습니다. JSX
에서는 중괄호로 묶어야 합니다. 예를 들어 다음 코드는 #🎜🎜#rrreee#🎜🎜#
p
와 같은 JSX
의 React 요소는 결국 다음으로 번역됩니다. 일부 특정 함수는 가벼운 javascript 객체
로 처리됩니다. 예를 들어 위에서 언급한 p
요소는 결국 다음과 같은 객체
가 됩니다. #🎜🎜#rrreee#🎜🎜#React는 이러한 객체 DOM을 읽어 를 작동합니다 code>데이터 내용을 일관되게 유지합니다. 따라서 실제로는 여전히 <code>js
를 작성하고 있습니다. 따라서 class
와 style
은 js
와 동일하게 작성해야 합니다.예:
class
=> className
또 다른 예:
font-size: 20px;
=> {fontSize: "20px" }
# 🎜🎜## 🎜🎜#특히 React 요소의 속성은 여전히 따옴표를 사용하여 기본 html
과 같은 문자열 값으로 속성을 정의할 수 있습니다. 예: className="my-claname "
#🎜🎜##🎜🎜#위의 내용 외에도 JSX
의 이벤트 바인딩에는 기본 html
과 몇 가지 구문 차이가 있습니다. #🎜 🎜#- #🎜🎜#React의 이벤트 이름은 소문자 대신 카멜 케이스로 작성됩니다. #🎜🎜#
- #🎜🎜#React 이벤트 바인딩은 문자열이 아닌 함수 객체여야 합니다. #🎜🎜#
state
는 비공개이며 현재 구성 요소에 의해 완전히 제어됩니다. 상태이므로 업데이트가 필요합니다. 어떻게 업데이트하나요? 코드 예: #🎜🎜#rrreee#🎜🎜#
setState()
는 React에서 구성 요소를 동적으로 업데이트하는 유일한 방법입니다. 호출되면 자체 구성 요소가 업데이트됩니다. 모든 하위 구성요소는 모두 재렌더링을 트리거합니다.특히
state
는 하위 구성요소에 속성으로 전달될 수도 있습니다.setState()
자세한 문서#🎜🎜 ##🎜🎜##🎜🎜#Component 속성 props#🎜🎜##🎜🎜##🎜🎜#props
는 상위 구성 요소에 의해 전달되는 데이터이며 일반적으로 상위 구성 요소의 상태또는 구성 요소의 다른 멤버 변수입니다. 또한 #🎜🎜#props
는 읽기 전용이며 구성 요소는 자체 props
#🎜🎜#을 수정할 수 없습니다. 상위 구성 요소가 setState()
를 호출한 후에만 하위 구성 요소의 속성을 변경하고 다시 렌더링할 수 있습니다. props
는 위에서 아래로만 전달될 수 있으며 구성 요소는 자신의 비공개 상태
만 수정할 수 있습니다. 즉, 전체 애플리케이션의 데이터 흐름은 be #🎜🎜 #위에서 아래로의 단방향 데이터 흐름#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Summary#🎜🎜##🎜🎜#컴포넌트 수명 주기 JSX 컴포넌트 상태 상태 컴포넌트 속성 props 하향식 단방향 데이터 흐름과 결합된 이는 React 컴포넌트의 가장 기본적인 기능입니다!
관련 권장 사항:
위 내용은 React 구성 요소를 작성하는 방법은 무엇입니까? (암호)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

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

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
