1. 태그안에 바로 정의
const Button = ({ text, color, children }) => {
return (
<button
onClick={() => {
console.log(text);
}}
style=
>
{text} - {color.toUpperCase()}
{children}
</button>
);
};
Button.defaultProps = { color: "black" };
export default Button;
위에처럼 태그 안에 바로 정의 해도 되고 아래처럼 이벤트 로직이 길면 빼서해도 된다.
2. 함수로 빼서 정의
const Button = ({ text, color, children }) => {
const onClickButton = () => {
console.log(text);
};
return (
<button onClick={onClickButton} style=>
{text} - {color.toUpperCase()}
{children}
</button>
);
};
Button.defaultProps = { color: "black" };
export default Button;
함수 이름만 전달해야지 ()이거 붙여서 하면 안된다.
이벤트 객체
리액트에서는 모든 이벤트핸들러 함수에 이벤트 객체라는 것을 제공한다.
const onClickButton = (e) => {
console.log(e);
};
위에처럼 e라는 매개변수를 받아서 출력해보면 이런식으로 이벤트 객체가 반환되어있다.
이것이 바로 합성 이벤트 객체이다. 브라우저가 너무 많아서 동작이 조금씩 다 다르다. 크롬,엣지,파이어 폭스 등등. 이벤트 객체들도 브라우저 마다 조금씩 다르기 때문에 브라우저 별로 스펙이달라서 발생하는 문제를
cross browsing lssue 라고 한다.
여러 브라우저들의 규격을 통합해서 만들어 놓은 것이