yamoo9 / likelion-FEQA

질문/답변 — 프론트엔드 스쿨, 멋사
29 stars 9 forks source link

[LAB-9] 입력한 텍스트에서 마지막 글자가 제외됩니다. #193

Closed qorbaxk closed 1 year ago

qorbaxk commented 1 year ago

질문 작성자

백승연

문제 상황

환경 정보

yamoo9 commented 1 year ago

문제 원인

작성된 코드를 보면 https://github.com/yamoo9/likelion-FEQA/issues/117#issuecomment-1449394354 답변에서 발생한 이슈와 동일한 문제를 보여 줍니다. 아래 첨부된 영상을 보면 사용자 입력이 끝난 시점에서 e.target.value 값을 setTitle 업데이트 함수에 전달하지만, 그 아래 위치한 디스패치 코드에 전달되는 title은 아직 업데이트 전이기 때문에 마지막 글자가 빠진 것입니다. 😥

문제 해결

React 컴포넌트 상태는 즉각적으로 처리되는 것이 아니므로 useEffect 훅을 사용해 상태 변경이 확인된 후 Redux에 디스패치 해야 합니다.

const Diary: React.FC = () => {

  // 컴포넌트 상태
  const [title, setTitle] = useState<string>('');

  // 컴포넌트 상태가 업데이트 된 이후 콜백
  useEffect(() => {
    console.log('업데이트 된 title: ', title);
    dispatch(getDiary({ ...diary, title }));
  }, [title]);

  return (
    <>
      {/* ... */}
      <input
        // ...
        value={title}
        onChange={e => {
          setTitle(e.target.value)
        }}
      />
    </>
  );
};

그러면 아래 영상처럼 title 상태 업데이트 이후 디스패치 되므로 정상적으로 저장될 것입니다. 😊

qorbaxk commented 1 year ago

감사합니다! 이대로 해보겠습니다!