본문 바로가기

Sparta x 이노베이션 캠프/React

TIL) eventListener

반응형
eventListener

클래스형 컴포넌트에서 eventListener 구독하기, mouseover 시에 색깔 바뀌게 하기

 

import logo
from './logo.svg';
import './App.css';
import React from "react";
import Text from "./Text";

class App extends React.Component{
  	constructor(props){
  	super(props);
	this.state = {};
  	this.circle = React.createRef(null);
	}

  	hoverEvent = (e) = > {
  	console.log(e.target); // 이 이벤트가 발생한 요소가 뭔지 보여줌
  	console.log(this.circle.current); // 우리가 ref로 잡아준 요소와 e.target이 같은지 확인해보자.두개가 같은 값이므로 this.circle.current 써도 무방
  	this.circle.current.style.background = "pink";
	}

	componentDidMount(){
  	console.log(this.circle);
  	this.circle.current.addEventListener("mouseover", this.hoverEvent); // addEventListener에 1. 어떤 이벤트, 2. 어떤 행동 할지 두가지 인자 넣어줌
	}

	componentWillUnmount() {
  	this.circle.current.removeEventListener("mouseover", this.hoverEvent); // component가 사라질 때, 이벤트리스너가 사라진다.
	}

	render() {


	return (
   	 	< div style={{width: "100vw", height:"100vh", textAlign:"center"}} >
   	 		< Text / >
   	 		< div style={{margin:"auto", width: "250px", height: "250px", background:"green", borderRadius:"250px"}} ref={this.circle} > 
              		< / div >
    		< / div >
		);
	}
}

export default App;

 

함수형 컴포넌트에서 eventListener 구독하기, mouseover 시에 색깔 바뀌게!

 

useEffect를 사용, 리액트 훅 중의 하나.

componentDidMount, componentDidUpdate, componentWillUnmount 가 모두 합쳐진 것.

 

React.useEffect(() => {} , []); 
// 여기가 rendering 때 실행될 구문이 들어가는 부분.
// componentDidMount, componentDidUpdate 일 때 동작하는 부분이 여기.
// do something...

    return () => {        
    // 여기가 clean up 부분. 컴포넌트의 함수선언부분 return이 아니라 useEffect 함수의 return임
    // componentWillUnmount 때 동작하는 부분이 여기.
    // do something...

 

동작 원리:

컴포넌트가 렌더링되면 화살표 함수를 실행한다. 실행 조건이 있는데 첫번째 화살표 함수 실행은 무조건 실행. 두번째 실행은(=rerendering) dependency array('[]') 요소 확인 후 요소에 바뀐게 있을 때만 실행이됨.

1. []에 배열이 없을 때, componentDidMount 같은 동작을 함. (리랜더링 안일어남)

2. []의 요소에 변화가 있을 때, componentDidUpdate와 같은 동작을 함. 

3. 컴포넌트가 화면에서 사라질때 동작하는걸 리턴에 넣으면 됨.

 

import React from "react";

const Text = (props) => {
const text = React.useRef(null);

const hoverEvent= () => {
    text.current.style.background = "yellow";     //text.current.style은 e.target과 같음
}

React.useEffect(() => {
    text.current.addEventListener("mouseover", hoverEvent);        //text.current에 mouseover 동작을 하는 어떤함수를 addEventListener로 달아줄거야?

    return () => {
        text.current.removeEventListener("mouseover", hoverEvent);   //return에 text.current.removeEventListener를 같은 방식으로 달아줌
    }
}, []);

return (
   <h1 ref={text}>텍스트입니다!</h1>
  )
}

export default Text;

 

반응형

'Sparta x 이노베이션 캠프 > React' 카테고리의 다른 글

TIL) 내 버킷리스트 만들기 - 라우팅, React  (0) 2022.08.17
TIL) 라우팅이란?  (0) 2022.08.17
TIL) Ref  (0) 2022.08.17
TIL) React 키워드 정리  (0) 2022.08.16
TIL) yarn 과 npm 정의, 차이점  (0) 2022.08.12