함수형 컴포넌트
는 렌더링 된 값을 고정
하지만, 클래스형 컴포넌트는 그러지 못함
import React from 'react'
interface Props {
user : string
}
export function FunctionalComponent (props : Props) {
const showMessage = () => {
alert(`Hello ${props.user}`)
}
const handleClick = () => {
setTimeout(showMessage, 3000)
}
return <button onClick={handleClick}>클릭</button>
}
import React from 'react'
interface Props {
user : string
}
export class ClassComponent extends React.Component<Props, {}>{
const showMessage = () => {
alert(`Hello ${this.props.user}`)
}
private handleClick = () => {
setTimeout(this.showMessage, 3000)
// 클릭 시, 3초뒤에 변경된 props를 기준으로 메세지가 뜸.(의도한 방향이 아님)
}
return <button onClick={this.handleClick}>클릭</button>
}
import React from 'react'
interface Props {
user : string
}
export class ClassComponent extends React.Component<Props, {}>{
const showMessage = (name : string) => {
alert(`Hello ${name}`)
}
private handleClick = () => {
const {
props : {user}
} = this
setTimeout(this.showMessage(name), 3000)
// this.props를 좀 더 일찍 부르고, 함수의 인수로 넘김
}
public render() {
<button onClick={this.handleClick}>클릭</button>
}
}
import React from 'react'
interface Props {
user : string
}
export class ClassComponent extends React.Component<Props, {}>{
// render 함수안에 필요한 모든 값을 넘기는 방법
// 함수가 가진 목적에 맞지 않은 것으로 보임
render() {
const {
props : {user}
} = this
const showMessage = (name : string) => {
alert(`Hello ${name}`)
}
handleClick = () => {
setTimeout(showMessage, 3000)
}
return <button onClick={this.handleClick}>클릭</button>
}