codestates / codestates/EATO

[Dev-log] 220227 김제완

Open
#95 0 comments 0 reactions 1 assignee Claimed by @Jaekomplett View on GitHub
3week Client Dev-log
Dominant language
JavaScript
Stars
3
Forks
0
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?
- 로그인 상태 유지 구현

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
- recoil의 사용법을 제대로 인지하지 못해서 로그인 상태 유지 구현에만 몇 시간을 내리 허비했다. 상태 변화의 복잡성을 줄이고 코드 로직의 효율을 높이기 위해 recoil을 도입한 건데 recoil을 사용하지 않고, useState를 사용하면서, props 지옥으로 괜한 헛수고를 진짜 몇 번을 한지 모르겠다.

내가 이해한 바는 아래와 같다.

recoil로 전역에 **로그인, 비로그인** 상태값을 지정해주고,
```js

import { atom } from "recoil";
import { recoilPersist } from "recoil-persist"
const { persistAtom } = recoilPersist();

const IsLoginState = atom({
key: 'IsLoginState',
default: false,
effects_UNSTABLE: [persistAtom],
});

export default IsLoginState;
```
**로그인** 버튼 클릭시 상태값 `true`로 변환 후 홈페이지로 이동한다. 이 상태는 어떤 이벤트로 상태값을 `false`로 변환하지 않는 한 바뀌지 않는다.
```js
const onSubmit = (data) => {
axios
.post(
"http://localhost:27017/user/login",
{ email: data.email, password: data.password },
config
)
.then((res) => {
const loginFalse = res.data.loginSuccess;
if (loginFalse === false) {
setErrMsg("아이디와 비밀번호를 정확하게 적어주세요.");
} else {
setIsLogin(true);
navigate("/home");
}
});
};

```

상태값이 true인 상태로 홈페이지로 이동하면 네비게이션바가 아래 삼항연산자처럼
`true` : **알림창, 마이페이지, 로그아웃**으로 변환
`false` : **로그인, 회원가입**으로 변환
```js

{isLogin ? (
<>


마이페이지


로그아웃


) : (
<>

로그인


회원가입


)}
```

위에서 네비게이션 바에 존재하는 **로그아웃** 버튼 클릭시 상태값을 false로 변환 후 랜딩페이지로 리플레이스
```js
const logoutHandler = () => {
axios.get("http://localhost:27017/user/logout", config).then(() => {
setIsLogin(false);
navigate("/", { replace: true });
alert("로그아웃이 완료되었습니다.");
});
};
```

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [ ] Todo 형식으로 기록해주세요.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.