JSX 태그에 이벤트 핸들러 달기
JSX 태그에 이벤트 핸들러를 달고싶다면, 아래의 3가지만 기억하세요.
나머지는 HTML 태그처럼 사용하시면 됩니다!
- 문자열 대신 함수를 전달합니다.
- 이벤트 핸들러 함수의 이름은 lowerCalmelCase으로 짓습니다.
- 이벤트 핸들러 함수의 첫 번째 인자는 this로 바운딩해야 합니다.
html + js :
function toggleLasers(){ ... } <button onClick="toggleLasers()" isToggleOn=false />
JSX :
interface ToggleState { isToggleOn: boolean; } class Laser extends React.Component<ToggleState, ToggleState> { constructor(props: ToggleState) { super(props); this.state = { isToggleOn: props.isToggleOn }; // (1) 반드시 바인딩하세요. this.toggleLaser = this.toggleLaser.bind(this); } // (2) 핸들러의 이름은 lowerCammelCase 스타일로 작성하세요. toggleLaser() { this.setState(prevState => { return { isToggleOn: !prevState.isToggleOn }; }); } render(): ReactNode { // (3) {} 안에 함수를 넣어 전달하세요. return <button onClick={this.toggleLaser} />; // 인라인 바인딩도 가능합니다. // return <button onClick{this.toggleLaser.bind(this)} />; } }
자바스크립트의 동작방식에 따라 this는 문맥에 따라 바뀔 수 있습니다.
반드시 this가 객체 자신을 가르키도록 함수를 바인딩해야 합니다.
인라인 바운딩을 사용하면, 추가인자도 전달할 수 있습니다.
<button onClick={this.toggleLaser.bind(this, param)} />;
'# Tech > React' 카테고리의 다른 글
[Typescript React] 상태 관리 라이브러리 (0) | 2019.12.06 |
---|---|
[Typescript React] 조건부 렌더링 (0) | 2019.12.06 |
[Typescript React] 컴포넌트 생명주기 (0) | 2019.12.06 |
[Typescript React] 컴포넌트 만들기 (0) | 2019.12.06 |
[Typescript React] JSX 문법 (0) | 2019.12.05 |