// Unlike the class component setState, the updates are not allowed to be partial
type SetStateAction<S> = S | ((prevState: S) => S);
S
setState(value)
처럼 값이 직접 변경되는 경우를 의미한다.((prevState: S) => S)
setState((prev) => !prev)
와 같은 경우 사용된다.function Parent() {
const [state, setState] = useState(false);
return (
<div>
<Child setState={setState} />
</div>
);
}
좋지 않은 방법
interface ChildProps {
setState: () => void;
}
이렇게 사용하자!
interface ChildProps {
setState: Dispatch<SetStateAction<boolean>>;
}
const Child: React.FC<ChildProps> = ({ setState }) => {
return (
<div>
<button onClick={() => setstate((prev) => !prev)}>CLICK!</button>
</div>
);
};
만약 Dispatch 없이 setStateAction만 쓴다면?
import React, { SetStateAction } from "react";
interface Props {
setState: SetStateAction<boolean>;
}
export const MyInput: React.FC<Props> = ({ setState }) => {
return (
<>
<button onClick={() => setState(false)}></button>
</>
);
};