일반적인 js와 같이 onclick property로 작성해준다. 하지만 이는 JS가 아닌 JSX의 문법인것을 인지하여야 한다.
(근데 참 아이러니한게 앞서 배웠을 땐 Html property에 onclick을 하면 js코드가 할 일을 Html에 부여하는것과 같아서 mordern web에서는 지양한다고 배웠는데 react에서는 잘만 쓴다하핫;;)
그렇다면 왜 온 클릭에 괄호를 안 달아주고 함수 pointing만 할까?
만약 괄호를 추가했다면 이 코드 라인들이 분석되었을 때 JS는 이 함수을 실행했을 것이다.
그리고 JSX코드가 반환될 때 이 코드라인이 분석이 된다.
그러면 클릭했을 때 함수가 실행되는 것이 아니라 이 JSX코드가 평가될 때 실행된다.
그렇면 순서가 너무 빠르기 때문에 함수를 pointing만 한것이다.
function ExpenseItem(props) {
const clickHandler = () => {
let title="Changed!";
}
return (
<Card className={"expense-item"}>
<ExpenseDate data={props.expense.date}/>
<div className={"expense-item__description"}>
<h2>{title}</h2>
<div className={"expense-item__price"}>${props.expense.amount}</div>
</div>
<button onClick={clickHandler}>Change Title</button>
</Card>
);
}
저기서 Expenses 태그를 만나면 해당 함수를 또 호출한다.
* 저기서는 Card와 ExpenseItem 함수를 또 호출하고..... 계속 호출하여
더이상 호출할 Component 코드가 없을 때까지 하여 이 Compoenent JSX코드를 통과시킨다. 그리고 전반적인 결과를 다시 평가하고 DOM 명령어로 번역하여 화면에 보여지는 것을 렌더링한다. 그것이 바로 React가 동작하는 방식이다.즉, 리액트는 JSX코드를 evaluate할때마다 사용자 지정 컴포넌트 함수들을 호출할 것이다.
그리고 사용자 지정 컴포넌트 함수들을 모든 평가된 JSX코드를 평가할 JSX코드가 없을 때까지 계속 반환하는 것이다.
react.js를 정적 => 동적으로 바꿔주는 핵심 개념
State는 각 component마다 별도로 존재한다.
무슨말이냐 바로 이 별도로 존재하는 State를 이용하며 사용자가 클릭하는 해당 컴포넌트의 state만 최신화하여 web이 dynamic하게 바꿔준다는 뜻이다.
import React, {useState} from 'react';
use라는 접두어가 붙는다.'' 아니라면 props.어쩌구저쩌구
const[현재값변수 명, 새로운값을부여할함수 명] = useState(전값에들어갈변수);
const[title, setTitle] = useState(props.title);
이때 통상 새로운 값을 부여할 함수명은 전값명수 명 앞세 set접두어를 붙이는게 통상적이다.
그럼 아래와같은 결과값을 얻을 수 있는데 특징이 console.log에 찍힌 값들은 전 값을 갖는다는 것이다. 왜?

state를 update하는 함수를 호출했을 때는 아직 전 값이기 때문에! 즉, 함수내에선 아직 새로운 값이 사용되지 않는다는 뜻이다.
