질문1. signup.js에서
const [term, setTerm] = useState('');
const onChangeTerm = useCallback((e) => {
setTerm(e.target.checked);
setTermError(false);
}, []);
<Checkbox name="user-term" checked={term} onChange={onChangeTerm}>제로초 말을 잘 들을 것을 동의합니다.</Checkbox>
체크박스를 누르면 onChangeterm이 실행되면서 term이 true로 바뀌잖아요? 그런데 최초값을
const [term, setTerm] = useState('');
불린으로 주지않고 이렇게 문자열로 주었는데 어떻게 true로 나올 수 있는지 궁금합니다
질문2. 회원가입 실행과정이 제가 이해한것이 맞는지 여쭈고 싶습니다.
먼저 회원가입 버튼을 누르면
dispatch({
type: SIGN_UP_REQUEST,
data: { email, password, nickname },
});
signup.js에서 dispatch가 실행되면서 reducer 폴더의 user.js의
case SIGN_UP_REQUEST:
draft.signUpLoading = true;
draft.signUpError = null;
draft.signUpDone = false;
break;
위의 reducer 코드가 실행되고 그다음은 saga폴더의 user.js에서
function* watchSignUp() {
yield takeLatest(SIGN_UP_REQUEST, signUp);
}
가 실행된다음 function* signUp(action) {
try {
const result = yield call(signUpAPI, action.data);
console.log(result);
yield put({
type: SIGN_UP_SUCCESS,
});
} catch (err) {
console.error(err);
yield put({
type: SIGN_UP_FAILURE,
error: err.response.data,
});
}
}
function signUpAPI(data) {
return axios.post('/user', data);
}
서버 요청으로 인해 백앤드의 route폴더의 user.js에서 디비에 값을 저장한후 갖고 온 값을 result에 담은후 sign_UP_SUCCESS 로 인해
reducer폴더의 user.js의
case SIGN_UP_SUCCESS:
draft.signUpLoading = false;
draft.signUpDone = true;
break;
가 실행되어 리덕스의 이 값들이 저장되는 것이 맞나요??
제가 이해한 흐름과 순서가 맞는지 궁금합니다!
질문3.
const { me, logOutLoading } = useSelector((state) => state.user);
이렇게 state.user을 불러오는건 passport 폴더의 index.js의
passport.deserializeUser(async (id, done) => {
try {
const user = await User.findOne({ where: { id }});
done(null, user); // req.user
} catch (error) {
console.error(error);
done(error);
}
});
이것으로 인해 가능한것인가요?
아니면 reudecer폴더의 user.js에 있는 것을 불러오는 것인가요? state.user은 어떤 uesr인가요?