-
Notifications
You must be signed in to change notification settings - Fork 0
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
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
const [uncontrolledProp, setUncontrolledProp] = useState<T | undefined>( | ||
defaultProp, | ||
); |
There was a problem hiding this comment.
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).
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; |
There was a problem hiding this comment.
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( |
There was a problem hiding this comment.
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); |
There was a problem hiding this comment.
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를 해도 안전하게 동작합니다.
이슈 번호
작업한 목록을 작성해 주세요
스크린샷
pr 포인트나 궁금한 점을 작성해 주세요