properties 의 줄임말
컴포넌트의 속성값이라는 뜻을 가지고 있다.
우리가 어떠한 값을 컴포넌트에게 전달해줘야 할 때, props 를 사용한다.
부모 컴포넌트로 부터 물려 받은 데이터를 가지고 있는 속성이다.
그래서 props를 통해서 부모 컴포넌트와 소통할 수 있다.
영어 state 그대로
컴포넌트 내부에서 가지고 있는 컴포넌트의 상태값이다.
화면에 보여줄 컴포넌트의 UI 정보(상태)를 지니고 있는 객체이고,
해당 컴포넌트 내에서 정의하고 사용하며 데이터가 변경 될 수도 있다.
리액트는 단방향 데이터 바인딩!
일반적으로 리액트에서는 state 관리를 할때, props를 통해
부모 -> 자식 (하향식) 데이터 흐름이 일어난다.
그래서 데이터의 흐름을 명확히 알 수 있고 예측 가능하다.
두 데이터 혹은 정보의 소스를 모두 일치시키는 기법.
즉 화면에 보이는 데이터(HTML)와 브라우저 메모리(JS)에 있는 데이터를 일치시키는 기법이다.
대다수의 자바스크립트 프레임워크가 단방향 데이터 바인딩을 지원하지만,
AngularJS는 양방향 데이터 바인딩을 제공한다.
리액트에서도 양방향 바인딩과 같은 동작을 일으킬 수 있다.
리액트 공식문서에선 state 끌어올리기라고 한다!
부모 함수에서 만든 함수를 자식 컴포넌트에 내려준다.
자식 컴포넌트는 부모함수에서 받은 함수에 올려다줄 데이터를 함수에 넣어준다.
이해하기 쉽게 말하면
부모컴포넌트 : "야 자식아, 내가 보낸 보트에 사람을 태워줘 다시 나한테 보트를 보내줘"
자식컴포넌트 : "(보트를 받으면), 야 부모야 보트 받았어. 클릭할때 너의 보트에 내가 가지고 있는 사람을 태워서 보내줄게!"
부모컴포넌트 : "(클릭이 일어나면), 야 자식아 사람 보트에 잘 온거 확인했다. 고마워"
const 내가만든보트 = (human) => {
setNewArray(human);
}
<NaJaSick parentCallBack={(p)=>내가만든보트(p)}/>
const [human, setHuman] = useState();
<div onClick={() => props.parentCallBack(human)}/>