declarative vs. imperative programming ~ meaning and example
deep dive: displaying many visual states at once (storybooks ~ 스토리북이 이건가?)
step4 잘 이해해보자. 중요한 것은 중복과 모순의 제거
step 5: 중심 내용과 별개로 코드에서 promise, resolve, reject 부분 정확히 알고 있지 못하니 볼때마다. 찝찝하다. 시간 들여서 이해해보자.
예시 코드에서 한 컴포넌트 안에 jsx return statement가 두개인 부분. 이렇게 하는 방식도 안써봐서 익숙하지는 않지만 상황에 따라 잘 쓰면 더 깔끔하게 코드 작성할 수 있을 것 같다. status state이 업데이트 되면 컴포넌트가 re-render되면서 아래 if statement가 re-evaluate되며 작동하게 되는 원리.
if (status === 'success') {
return <h1>That's right!</h1>
}
Recap
Challenge 스킵했으니 리뷰할때 ㄱㄱ
key
flattening(normalize)한거 신기하네. 특히 (Root)에 해당하는 0번 object property를 만들어서 하위 행성들을 관리하는 모습. 한 구조 안에 다층적인 구조를 다 구현하는 모습.
코드에서
setPlan({
...plan,
// ...so that it has the updated parent.
**[parentId]: nextParent**
});
[ ] 대괄호로 감싸서 처리하는 부분 기억해두자~ 저렇게 할 수 있구나. 참고로 기존 plan은 아래와 같은 구조로 되어 있는 녀석이다.

deep dive:
import { useState } from 'react';
export default function SyncedInputs() {
const [text, setText] = useState('');
return (
<>
<Input label="First input" text={text} setText={setText} />
<Input label="Second input" text={text} setText={setText} />
</>
);
}
function Input({ label, text, setText }) {
function handleChange(e) {
setText(e.target.value);
}
return (
<label>
{label}
{' '}
<input
value={text}
onChange={handleChange}
/>
</label>
);
}
setText를 child component(Input) 안에서)import { useState } from 'react';
export default function SyncedInputs() {
const [text, setText] = useState('');
function handleChange(e) {
setText(e.target.value);
}
return (
<>
<Input
label="First input"
value={text}
onChange={handleChange}
/>
<Input
label="Second input"
value={text}
onChange={handleChange}
/>
</>
);
}
function Input({ label, value, onChange }) {
return (
<label>
{label}
{' '}
<input
value={value}
onChange={onChange}
/>
</label>
);
}