Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(ui/hooks): useControllableState 내부 type 명확화, value 관련 명칭 state로 수정 #330

Merged
merged 2 commits into from
Aug 22, 2024

Conversation

sukvvon
Copy link
Member

@sukvvon sukvvon commented Aug 22, 2024

이슈 번호

작업한 목록을 작성해 주세요

  • 이슈 내용과 같습니다.

스크린샷

pr 포인트나 궁금한 점을 작성해 주세요

Copy link

vercel bot commented Aug 22, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
favolink-web ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 22, 2024 5:44pm

@github-actions github-actions bot added the refactor 코드 리팩토링, 구조 개선, 성능 향상 등 기능 변경 없이 코드 자체를 개선하는 작업 label Aug 22, 2024
Comment on lines +20 to +22
const [uncontrolledProp, setUncontrolledProp] = useState<T | undefined>(
defaultProp,
);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setState 내부 setUncontrolledProp이 쓰이므로 useState의 generic에 타입을 명시합니다(T | undefined).

Comment on lines +24 to -29
const state = isControlled ? prop : uncontrolledProp;
const handleChange = useCallbackRef(onChange);
const shouldUpdateProp = useCallbackRef(shouldUpdate);

const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue as T);
const isControlled = valueProp !== undefined;
const value = isControlled ? valueProp : uncontrolledValue;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존 값을 의미하는 value에서 어떤 상태가 올지 모르기 때문에 명확히 하기 위해 상태를 의미하는 state로 명칭을 변경합니다.


const setValue: Dispatch<SetStateAction<T>> = useCallback(
const setState: Dispatch<SetStateAction<T | undefined>> = useCallback(
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존 값을 의미하는 value에서 어떤 상태가 올지 모르기 때문에 명확히 하기 위해 상태를 의미하는 state로 명칭을 변경합니다.

마찬가지로 setValue에서 setState로 명칭을 변경합니다.


handleChange(nextValue);
handleChange(nextState as T);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nextValue는 항상 undefined가 아닌 값이 오기 때문에 T로 단언합니다.

const [state = false, setState] = useControllableState({
  prop: undefined,
  defaultProp: undefined,
  onChange: undefined,
});

setState((prevState = false) => !prevState);

setState(!state);

위와 같이 T가 boolean이고 모든 useControllableState에 들어가는 값들이 undefined인 경우를 예시로 들면 항상 prevState는 undefined일 경우 false와 같이 정의해야만 typescript에서 오류가 발생하지 않습니다. 또한 state를 이미 false와 같은 값으로 지정하였기 때문에 !state를 해도 안전하게 동작합니다.

@sukvvon sukvvon merged commit 401a3ec into main Aug 22, 2024
7 checks passed
@sukvvon sukvvon deleted the refactor/329 branch August 22, 2024 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactor 코드 리팩토링, 구조 개선, 성능 향상 등 기능 변경 없이 코드 자체를 개선하는 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

refactor(ui/hooks): useControllableState 내부 type 명확화, value 관련 명칭 state로 수정
1 participant