리액트 라이프사이클 방식 | 16일차
25137 단어 webdevbeginnersprogrammingjavascript
뭐
React의 모든 구성 요소에는 3가지 주요 단계 동안 모니터링하거나 업데이트할 수 있는 수명 주기가 있습니다.
따라서 모든 구성 요소는 수명 동안 3개의 주요 단계를 갖습니다.
1.) 마운팅 → 컴포넌트를 DOM에 추가하는 것을 의미합니다.
2.) 업데이트 중 → 구성 요소의 상태 또는 기타 데이터 업데이트.
3.) 마운트 해제 → DOM에서 컴포넌트 제거.
어떻게
Mounting
Component가 DOM에서 처음으로 렌더링되면 Mounting이라고 합니다.
React에는 Mounting 중에 호출된 3가지 메서드가 있습니다.
1.) 생성자()
2.) 렌더링()
3.) 컴포넌트DidMount()
더 나아가기 전에 접두사가
will
인 메서드를 rightbefore Something happen
라고 하고 접두사가 Did
인 메서드를 rightafter Something happen
라고 합니다.생성자는 1st를 호출하고 상태를 초기화하고 이벤트 핸들러를 바인딩하는 데 사용됩니다.
그 후
render
가 호출됩니다.구성 요소가 렌더링된 후 React는
ComponentDidMount()
를 호출합니다.componenetDidMount()
에서 상태를 변경하려고 하면 Re-rendering
가 발생합니다. 이 예를 살펴보겠습니다.
import React,{Component} from "react"
class ReactLifestyle extends Component{
constructor(props){
super(props);
this.state = {count:1}
console.log('In Constructor Method')
}
componentDidMount(){
console.log('IN Component Did Mount')
this.setState({count:2})
}
render(){
console.log('In Render method')
return(
<div>
hi
</div>
)
}
}
export default ReactLifestyle;
코드의 출력은 👇입니다.
보시다시피 1st
Constructor Method
는 thenRender Method
, thenComponent Did Mount
입니다.또한
ComponentDidMount
에서 상태를 설정하려고 하면 출력에서 u가 할 수 있는 것처럼 다시 렌더링됩니다.componentDidMount
Ajax를 통해 데이터 로드
import React, { Component } from 'react';
import axios from 'axios';
import "./Zenquote.css"
class Zenquote extends Component {
constructor(props) {
super(props);
this.state = {quote:"",isloading:true};
}
componentDidMount() {
//WE are adding the setTimeout so can we can get in a Condition when after rendering the Data Fetching takes time.
setTimeout(() =>{
axios.get("https://api.github.com/zen")
.then((res)=>{
console.log(res.data);
this.setState({quote:res.data,isloading:false});
})
.catch((err)=>{
console.log(err);
})
},1000)
}
render() {
return( <div>
{this.state.isloading?
(<p className="circle">
Loading .........
</p>)
: (<div>
<h3>Always Remember ....</h3>
<p>{this.state.quote}</p>
</div>)}
</div>);
}
}
export default Zenquote
quote
을 얻었고 axios를 사용하여 데이터를 가져오고 setTimeout을 사용하여 때때로 데이터 가져오기에 시간이 걸린다는 것을 설명해야 합니다. animated Loader
를 추가할 수 있는 시간입니다. Async 기능을 사용하여 데이터 불러오기 →
Async/await
약속을 더 쉽게 작성할 수 있습니다.Async
함수가 Promise를 반환하도록 합니다.Await
함수가 약속을 기다리도록 합니다.componentDidmount(){
async GetData(){
let res = await fetch('http://github.com.api/users');
console.log(res);
}
}
예 →
import React, { Component } from 'react';
import axios from 'axios';
class GithubUsersInfo extends Component {
constructor(props) {
super(props);
this.state = {imgUrl:"",name:"",followers:""};
}
async componentDidMount() {
let user = `https://api.github.com/users/${this.props.user}`
const res = await axios.get(user)
console.log(res);
this.setState({imgUrl :res.data.avatar_url,name:res.data.name,followers:res.data.followers})
}
render() {
return <div>
<h2>Github User Name : {this.state.name}</h2>
<img src={this.state.imgUrl} alt="image"/>
<p>Followers : {this.state.followers}</p>
</div>;
}
}
export default GithubUsersInfo
ComponentDidUpdate →
업데이트는 State , Props(상위 측에서 변경됨) 또는 기타 외부 데이터를 변경하여 수행할 수 있습니다.
Like
forceUpdate
는 상태에 있지 않은 항목을 업데이트하는 데 사용되며 종종 외부 데이터이므로 forcedata()
를 사용할 수 있도록 변경합니다.Something Re-rendering Happen을 업데이트하면
ComponentDidUpdate()
가 호출됩니다.따라서
ComponentDidUpdate()
를 사용하여 모든 데이터를 변경된 데이터베이스에 저장할 수 있습니다.예 →
import React, { Component } from 'react';
import axios from 'axios';
import "./Zenquote.css"
class Zenquote extends Component {
constructor(props) {
console.log("In Constructor")
super(props);
this.state = {quote:"",isloading:true};
}
componentDidMount() {
console.log("In Component Did Mount")
setTimeout(() =>{
axios.get("https://api.github.com/zen")
.then((res)=>{
this.setState({quote:res.data,isloading:false});
})
.catch((err)=>{
console.log(err);
})
},1000)
}
componentDidUpdate(){
console.log("In Component Did Update")
}
render() {
console.log("Rendering .....")
return( <div>
{this.state.isloading?
(<p className="circle">
Loading .........
</p>)
: (<div>
<h3>Always Remember ....</h3>
<p>{this.state.quote}</p>
</div>)}
</div>);
}
}
export default Zenquote
아래 코드의 출력은 다음과 같습니다.
먼저 Constructor가 호출되고 렌더링이 발생한 다음 ComponentDidMount가 호출되고 ComponentDidMount에서 State를 변경하므로 Re-rendering이 발생하고 Re-rendering 후 상태를 변경하면
ComponentDidUpdate
Got가 호출됩니다.무언가를 업데이트할 때마다
ComponentDidUpdate
가 재렌더링 후에 호출됩니다. 따라서 Component Did Mount를 사용하여 데이터를 데이터베이스에 저장할 수 있습니다.또한 Component Did Update에서 이전 상태 및 이전 소품에 액세스할 수 있으므로 U는 이를 사용하여 상태 또는 소품을 이전 것과 비교할 수 있습니다.
이전 상태와 소품 u를 사용하려면 다음과 같이 작성해야 합니다.
componentDidUpdate(prevProps,prevState){
// Inside this u can use the previous props & the state
console.log(prevProps);
console.log(this.props);
}
ComponentWillUnmount()
DOM에서 무언가를 제거할 때 호출됩니다.
componenetWillUnmount(){
console.log('In Component Will Unmount')
//It will be called before the removal of the Component.
}
행복한 코딩 🙂
Reference
이 문제에 관하여(리액트 라이프사이클 방식 | 16일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jay818/react-lifecycle-method-day-16-52jn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)