카테고리 없음
23/12/04 til
한지지우우
2023. 12. 4. 23:26
과제해설을 듣고 내가 짠 코딩 문제점을 분석해보자.
일단 새로 배운 git 명령어
git remote -v 현재 연결된 원격 깃허브 주소들을 확인한다.
git remote remove origin 현재 연결된 원격 깃허브 오리진을 제거한다.
git remote add origin '주소' 새로운 오리진 연결한다.
<Router.js>
import Layout from "components/Layout"; //레이아웃 컴포넌트는 과제 요구사항의 헤더부분으로써
import Detail from "pages/Detail"; // 사용될 예정이었다 .리액트 라우터돔의 아웃렛을 응용요청
import Home from "pages/Home";
import Login from "pages/Login";
import Profile from "pages/Profile";
import { useSelector } from "react-redux";
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
export default function Router() {
useSelector
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />}> //과제를 할때 홈 라우트안에 레이아웃 라우트를 뒀다.
<Route element={<Layout />} /> // 튜터님의 해설에서는 레이아웃 라우트로 다른 라우트
</Route> //를 감싸서 사용하라고 알려주셨다.
<Route path="/login" element={<Login />} />
<Route path="/detail/:id" element={<Detail />} />
<Route path="/profile/:id" element={<Profile />} />
<Route path="*" element={<Navigate replace to="/" />} />
</Routes>
</BrowserRouter> // 레이아웃 라우터로 다른 라우터로 감싸고 레이아웃.jsx 파일에서 outlet을
); //임포트 해서 <outlet />으로 넣은곳에 다른 라우트들의 구현된다.
}
//아웃렛을 다시 사용해 봐야 겠다.
아래가 변 경해 본 <Router.jsx>
import Layout from "components/Layout";
import Detail from "pages/Detail";
import Home from "pages/Home";
import Login from "pages/Login";
import Profile from "pages/Profile";
import { useState } from "react";
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
export default function Router() {
const [isLogin , setIsLogin] = useState(false) //일단 이곳에 임시로 로그인 유무의 islogin 만듦
return ( //false면 비로그인 true면 로그인
<BrowserRouter>
<Routes>
{isLogin ? ( // islogin이 트루이면 홈화면으로 이동할수 있고
<>
<Route path="/" element={<Home />} />
<Route path="/detail/:id" element={<Detail />} />
<Route path="/profile/:id" element={<Profile />} /> //path에 별은 설정된값이외의 주소일경우
<Route path="*" element={<Navigate replace to="/" />} /> // 별표주소를 홈으로 설정
</>
) : ( //false이면 로그인을 반드시 해야할 수 있게끔 화면 구성을 한다.
<>
<Route path="/login" element={<Login />} />
<Route path="*" element={<Navigate replace to="/login" />} /> // 어떤 주소를 치더라도
</> //로그인페이지로 가게끔 별표주소생성
)} // 내가 과제할때는 홈화면 헤더인 layout.jsx에 로그인 버튼을 두었다.
<Route element={<Layout />} />
</Routes>
</BrowserRouter>
);
}
리덕스 툴킷을 이용한 리덕스를 생성해보자
<configurestore.js>
import letters from "redux/modules/letters";
import member from "redux/modules/member";
import authSlice from "redux/modules/authSlice";
import { configureStore } from "@reduxjs/toolkit";
//const rootReducer = combineReducers({ letters, member });
//const store = createStore(rootReducer, devToolsEnhancer());
const store = configureStore({ //일단 보통 리덕스에서 쓰는 createStore랑 다르게
reducer: { //combineReducers를 생략하고 썻다.
letters, //이렇게 써도 될것 같은데 튜터님 해설에서는 reducer키 값에
member, //value를 rootReducer로 하고
authSlice, //const rootReducer = combineReducers( { letters , member , authSlice})
}, //를 이용하셨는데 상관 없나 보다.
});
export default store;
<member.js>
import { createSlice } from "@reduxjs/toolkit";
// const SET_MEMBER = "member/SET_MEMBER";
// export const setMember = (payload) => {
// return { type: SET_MEMBER, payload };
// };
const initialState = "카리나";
// const member = (state = initialState, action) => {
// switch (action.type) {
// case SET_MEMBER:
// const activeMember = action.payload;
// return activeMember;
// default:
// return state;
// }
// };
//createSlice는 세가지 key를 갖는다. name 이니셜스테이트 ,reducersconst memberSlice = createSlice({
name: "member", //네임은 그렇게 중요하지는 않은듯하다. 데브툴스에서 확인용도 인가?
initialState,
reducers: {
setMember: (state, action) => {
const activeMember = action.payload;
return activeMember;
},
},
});
export default memberSlice.reducer; //리듀서 와 액션을 export
export const { setMember } = memberSlice.actions;// 액션스 중에 구조분해 할당으로 setMember 세팅 액션이 많으면
여러개 넣어도 된다.