board 프로젝트 부분
++ 어떤 태그든 간에 ref값도 props형태로 전달해주는 컴포넌트이기 때문에 html 태그를 직접 사용하는 최소단위 컴포넌트가 아닌 이상, 아래와 같이 ref도 props값으로 해당 태그를 사용하는 최소단위 컴포넌트까지 반드시 전달해주어야한다.
//PostWrite.js
<Input placeholder="제목을 입력하세요" _ref={title_ref} />
// Input.js
const { placeholder, _onChange, _ref } = props;
<ElInput placeholder={placeholder} onChange={_onChange} ref={_ref} />
props.history와 리덕스 Configurestore에서 import 해서 가져다 쓰는 그냥 history.push등으로 사용하는 history의 차이점..?과 사용방법의 차이점이 있나요? :
-> history를 Configurestore에서 import 해서 가져다 쓰는 방식은 커스텀 history를 사용하는 방법이다. 이를 사용하는 이유는 커스텀 history를 사용해서 콘솔을 통해 이동하는 로그를 확인하는 로깅 부분 때문.
history.push를 사용해서 특정 페이지로 이동을 app.js에서 라우팅 시켜주고, 특정 컴포넌트 내에서 .push를 사용해서 라우팅시킨 주소로 이동시키면 이동이 되는데, 상세 게시글과 같은 /detail/:id의 경우에는 app.js에서 라우팅을 시켜놔도 props.history를 사용하면 이해를 에러가 납니다. 이유가 뭘까요? :
-> 이게 에러가 났던 이유는 게시글 하나에 대한 정보를 담고 있는 Post.js가 App.js에서 라우팅을 한적이 없기 때문에, props에 history 객체가 비어있다. -> 이를 해결하기 위해서는 Post.js에서 withRouter를 사용해서, 컴포넌트를 export 해줄 때 withRouter로 감싸주어야 한다.
브라우저라우터와 커넥티드라우터의 차이점은?
오늘 알게 된 사실(07-19일 기준):
board 프로젝트 정리 및 추가적으로 공부할 점 + 향후 업데이트 할 내용
1. 프로젝트 정리:
1-1) 우선 C - R 기능을 만들었고, SET_POST의 개념에 대해 알 수 있었다. (SET_POST는 저장소(서버)에 있는 데이터를 리덕스로 불러와서 넣어주는 작업을 실행한다)
1-2) 이벤트 캡쳐링과 버블링에 대해서도 알 수 있었고, 이를 막아주는 코드도 배웠다.
1-3) 전반적으로 props를 어떻게 가져와서 사용하는지에 대해서도 알 수 있었고, 불변성 관리를 해주는 이머의 종류중 하나인 produce라는 친구도 배웠다. (draft를 사용해서 클론 개념으로 불변성 유지하면서 데이터 변경해주는것)
1-4) props에 들어있는 데이터 중 하나인 match.params를 사용해서 파라미터 url 값을 가져오는 법도 배웠다. (PostDetail페이지에서 해당 게시글에 대한 정보를 전체 게시글 리스트에서 긁어올때 사용)
1-5) 리덕스 사용법도 익혔다. (ACTION_TYPE, 기본값인 initialState, handleActions명명인 리듀서, 그 안에 있는 액션 생성자 addPost와 produce 사용해서 불변성 관리하면서 데이터 추가하기)
1-6) action에 들어있는 paylode라는 객체로 접근해야 그 안에 들어있는 데이터에 접근할 수 있는 것도 배웠다. (postWrite 페이지에서 ref를 사용해서 입력받은 값을 객체 형태인 post로 addPost가 넘겨받았을 때 리듀서에서 action.payload.post를 draft.post_list에서 push메소드를 사용해서 추가해주는 부분)
1-2) 이벤트 캡쳐링과 버블링을 막아주는 코드 예시)
<ListBox
onClick={(e) => {
// 이벤트 캡쳐링과 버블링을 막아주는 코드
e.preventDefault();
e.stopPropagation();
props.history.push(`/detail/${props.id}`);
}}
>
1-6 리듀서에서 action.payload.post를 draft.post_list에서 push메소드를 사용해서 추가해주는 부분 코드 예시)
export default handleActions(
{
[ADD_POST]: (state, action) => produce(state, (draft) => {
action.payload.post.id = draft.next_post_id++;
draft.post_list.push(action.payload.post);
}),
},
initialState
);
2. 추가적으로 공부할 점
2-1) 리덕스 부분. (특히 configueStore부분. 즉, 스토어 생겨먹은 구조와 동작 형태 + 커스텀 history를 사용하는 이유와 커스텀 history를 사용하기 위해서 무엇을 해야하는지에 대한 부분)
2-2) 뷰 부분..?
3. 향후 업데이트 할 내용
3-1) UPDATE 기능 추가와 DELETE 기능 추가 (CRUD 완성)
3-2) 뷰 부분..? (확실 x)