FRONT-END/ReactJS Clone project
[노마드/ReactJS 영화 웹 만들기] - Ch02 | 3. Events in React
서근
2023. 1. 15. 14:23
반응형
ReactJS로 영화 웹 만들기
자바스크립트에서는 마우스와 같이 어떠한 이벤트를 주기 위해선 많은 단계를 거쳐야 한다. addEventListener
를 사용하여 간단하게 보자면 아래와 같다.
<body>
<h2>안녕하세요</h2>
<button id="btn">클릭</button>
<script>
const main_title = document.querySelector('h2');
const btn = document.getElementById('btn');
function handleClick() {
console.log('클릭 되었습니다.');
}
btn.addEventListener('click', handleClick);
main_title.addEventListener('mouseover', (event) => {
console.log('타이틀에 마우스가 감지 되었습니다.');
});
</script>
</body>
클릭 이벤트
위 바닐라 JS를 React
로 바꿔주면 더욱 간편하게 이벤트를 적용시킬 수 있다.
const
를 render
하고 싶은 경우 div를 만들어준다.
그리고 React.createElement("div", null, \[title, btn\]);
와 같은 배열을 만들어서 const
를 넣어준다.
const container = React.createElement('div', null, [title, btn]);
이제 버튼이나 태그 안 property
에 eventListener
넣는 것도 가능하다.
-ReactJS
컴포넌트는 반드시 uppercase로 작성
const Title = React.createElement('h2', { id: 'main-title', onMouseOver: () => console.log('타이틀에 마우스가 감지 되었습니다.') }, '안녕하세요');
const Btn = React.createElement(
'button',
{
//JS의 addEventListener() 대신 React에서는 onClick과 같은 이벤트를 사용한다.
//다양한 React EventListener: https://ko.reactjs.org/docs/events.html
onClick: () => console.log('클릭 되었습니다.'),
style: { border: 'none', backgroundColor: 'blue', padding: '0.5rem 1rem', borderRadius: '1rem', color: 'white' },
},
'클릭'
);
이 코드를 상단 바닐라JS 코드와 비교해 보면 말도 안 되게 간단하게 코드가 작성되는 것을 알 수 있다.
TIP
콘솔에 안 뜨는 경우 event listener
가 소문자, 대문자로 잘 적혀있는지 확인해 보아야 한다.Uncaught ReferenceError: ReactDom is not defined
나올경우 ReactDOM
(DOM 대문자)으로 했는지 확인!
전체 코드
<body>
<div id="root"></div>
</body>
<script>
const root = document.getElementById('root');
const Title = React.createElement('h2', { id: 'main-title', onMouseOver: () => console.log('타이틀에 마우스가 감지 되었습니다.') }, '안녕하세요');
const Btn = React.createElement(
'button',
{
//JS의 addEventListener() 대신 React에서는 onClick과 같은 이벤트를 사용한다.
//다양한 React EventListener: https://ko.reactjs.org/docs/events.html
onClick: () => console.log('클릭 되었습니다.'),
style: { border: 'none', backgroundColor: 'blue', padding: '0.5rem 1rem', borderRadius: '1rem', color: 'white' },
},
'클릭'
);
//container를 만들어 span과 btn과 같은 태그를 배열로 묶어 render해준다.
const container = React.createElement('div', null, [Title, Btn]);
ReactDOM.render(container, root);
</script>
React 합성 이벤트 종류
다양한 이벤트 리스터 종류에 대해 알아보고 싶으면 아래 링크를 클릭해 확인해 볼 수 있다.
깃허브 자료