해당 글은 리액트에서 제공하는 자습서에 내용을 덧붙이고 풀어서 작성한 글입니다.
원문 : https://ko.reactjs.org/docs/getting-started.html
리액트의 이벤트 문법
- 소문자가 아닌 카멜케이스로 작성합니다.
onClick={activatelasers} (x)
onClick={activateLasers} (o)
- 문자열이아닌 함수로 전달합니다.
onClick="함수이름()" (x)
onClick={함수이름} (o)
기존 HTML
<button onclick="activateLasers()">
Activate Lasers
</button>
React
<button onClick={activateLasers}>
Activate Lasers
</button>
이벤트 기본 동작 방지
<a href="#" onClick={handleClick}>
Click me
</a>
<a>태그의 onClick에는 href로 페이지를 이동하라는 기본 동작이 있습니다.
이를 동작하지 않게 하고 onClick에 넘겨준 것만 실행되게 하기 위해선 preventDefault를 이용합니다.
function handleClick(e) {
e.preventDefault();
console.log('The link was clicked.');
}
event를 인자로 받고, e.preventDefault()를 호출하면, 이벤트의 기본동작은 동작하지 않게 되고 console.log만 수행됩니다.
이벤트에서의 this
기본적으로 onClick등으로 전달한 이벤트에서 this를 호출한 경우 바인딩 되어있지 않기 때문에 undefined로 표시됩니다.
따라서 onClick={this.handleClick}과 같이 뒤에 ()를 사용하지 않고 메서드를 참조할 경우, 해당 메서드를 바인딩 해주어야 합니다.
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn: true};
// 콜백에서 `this`가 작동하려면 아래와 같이 바인딩 해주어야 합니다.
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(state => ({
isToggleOn: !state.isToggleOn
}));
}
render() {
return (
<button onClick={this.handleClick}>
{this.state.isToggleOn ? 'ON' : 'OFF'}
</button>
);
}
}
ReactDOM.render(
<Toggle />,
document.getElementById('root')
);
button의 onClick에서 this를 사용하고 있기 때문에(this.setState) constructor에서 바인딩 하는 것을 볼 수 있습니다.
이벤트 함수에 인자 전달하기
onClickHandler(msg) {
console.log(msg)
}
이러한 onClick 이벤트 함수가 있고,
<button onClick={this.onClickHandler("BLA")}>Click!</button>
버튼의 onClick에 이렇게 전달했다면, 버튼이 클릭될 때 console.log가 수행되는 것이 아닌 화면이 렌더링 될 때 console.log가 수행된다.
앞서 보았다싶이 onClick에는 "함수이름()"이 아닌 "함수이름"으로 전달받기 때문에 저렇게 전달하면 onClickHandler를 수행한 뒤 retrun값을 onClick에 전달하게 될 것이다.
onClickHandler(msg) {
console.log(msg)
return () => {
console.log("리턴값이 전달된다.")
}
}
실제로 함수의 return값을 위처럼 함수로 전달하는 경우 버튼을 눌렀을 때 return 한 함수가 작동하는 것을 볼 수 있다.
따라서 이벤트 함수에 인자를 전달하는 방법은 두가지가 있다.
첫번째는 화살표함수를 사용하는 방식이다.
<button onClick={() => this.onClickHandler("BLA")}>Click!</button>
두번째는 bind()를 사용하는 방식이다.
<button onClick={this.onClickHandler.bind(this,"BLA")}>Click!</button>
'Develop > React' 카테고리의 다른 글
[React] 리액트 기초 배우기 #6 조건부 렌더링 (0) | 2020.05.01 |
---|---|
[React] 리액트 기초 배우기 #4 State 와 생명주기 (2) | 2020.04.27 |
[React] 리액트 기초 배우기 #3 components와 props (0) | 2020.04.26 |
[React] 리액트 기초 배우기 #2 JSX란? (0) | 2020.04.26 |
[React] 리액트 기초 배우기 #1 Hello React! 리액트 프로젝트 생성과 빌드 (0) | 2020.04.26 |