State는 Props처럼 App컴포넌트의 렌더링 결과물에 영향을 주는 데이터를 갖고 있는 객체지만, props는 함수의 매개변수처럼 컴포넌트에 전달되는 반면, state는 함수 내에 선언된 변수처럼 컴포넌트 안에서 관리된다는 차이가 있다.
props를 사용했는데도 state를 사용하는 이유는 사용하는 쪽과 구현하는 쪽을 철저하게 분리시켜서 양쪽의 편의성을 각자 도모하는 것에 있다.
setState()는 컴포넌트의 state객체에 대한 업데이트를 실행한다.
state가 변경되면 컴포넌트는 리렌더링 된다.
setState 호출은 비동기적으로 이루어지므로 setState 호출 직후 새로운 값이 바로 반영되지 않으므로 setState에 객체 대신 함수를 넣어준다.
setState는 이벤트 핸들러 내에서 비동기적이다. 이로 인해 부모와 자식이 모두 click이벤트에서 setState를 호출한다면 자식은 2번 렌더링 되지 않는다. 대신 react는 브라우저 이벤트가 끝날 시점에 state를 일괄적으로 업데이트한다.
presenter에 container안에 있는 변수/함수들을 객체로 넘겨준다.
Container부분
import BoardWriteUI from './BoardWrite.presenter'
export default function BoardWrite() {
const [writer, setWriter] = useState()
const handleChangeWriter = (event) => {
const writer..
}
}
return (
<BoardWriteUI aaa={handleChangeWriter} />
<BoardWriteUI bbb={writer} />
)
자동으로
props = {
aaa: handleChangeWriter
}
props = {
bbb: writer
}
가 생성되서 Presenter로 넘어간다.
Presenter에서
onChange={props.aaa}
onChange={props.bbb}
를 작성하여 사용한다.
반대로 자식 컴포넌트가 부모 컴포넌트에게 변수나 함수를 넘겨줄 방법은 없다. 즉, 단방향이다.
Presenter가 부모 컴포넌트가 되고 Emotin(CSS)이 자식 컴포넌트가 되서 넘겨줄 수 있다.
Page > Container > Presenter > Emotion 식으로 부모 자식 컴포넌트가 형성된다.