Open zeroFruit opened 7 years ago
@zeroFruit 감싸진 컴포넌트 라이프사이클 메소드랑 충돌된다는게 어떤 부분에서 충돌났는지 알수 있을까요??
@BoBinLee
// HOC.js
export default function(ComposedComponent) {
class ExtendsComponent extends Component {
...
componentWillReceiveProps(nextProps) {
/* CODE1 */
}
}
}
// Component1.js
class Component1 extends Component {
componentWillReceiveProps(nextProps) {
/* CODE2 */
}
}
@P1T1J1 @BoBinLee
9월13일 테스트 테스트할 때 학생용 링크로 디테일 페이지로 안넘어가졌는데 확인해보니까 세션체크 방식에 문제가 있었더라고.. 문제점하고 해결책 공유합니다!
// SessionCheckBeforeRoute.js
class SessionCheckBeforeRoute extends Component {
componentWillMount() {
this.props.sessionCheck();
}
render() {
const {
sessionValid,
isSessionChecking
} = this.props;
if (isSessionChecking) {
// 세션 체킹 중이라는 페이지 렌더
}
if (sessionValid) {
// 원래 라우트와 컴포넌트로 렌더
} else {
// 세션이 유효하지 않기 때문에 로그인 페이지로 리다이렉트
}
}
}
// modules/Sign/sagas.js
function* checkSession() {
try {
// default - isSessionChecking: false, sessionValid: false
yield put({ type: CHECK_SESSION_START }); // isSessionChecking: true, sessionValid: false
...
yield put({ type: CHECK_SESSION_SUCCESS }); // isSessionChecking: true, sessionValid: true
yield put({ type: CHECK_SESSION_FIN }); // isSessionChecking: false, sessionValid: true
} catch (error) {
yield put({ type: CHECK_SESSION_FAIL }); // isSessionChecking: true, sessionValid: false
yield put({ type: CHECK_SESSION_FIN }); // isSessionChecking: false, sessionValid: false
}
}
isSessionChecking
값이 false이기 때문에 바로 /user/login으로 리다이렉트되고 따라서 바로 /으로 이동isSessionChecking
초기값이 false라서 무조건 / 으로 이동된다.CHECK_SESSION_START
액션이 패치될 때는 이미 늦은 상태.class SessionCheckBeforeRoute extends Component {
constructor(props) {
super(props);
this.state = {
sessionValid: false,
isSessionChecking: true // 처음에는 항상 세션 체크 중이라고 생각한다!
};
}
componentWillMount() {
this.props.sessionCheck();
}
componentWillReceiveProps(nextProps) {
const { sessionValid, isSessionChecking } = nextProps;
this.setState({ sessionValid, isSessionChecking });
}
render() {
const {
...
} = this.props;
const {
sessionValid,
isSessionChecking
} = this.state;
if (isSessionChecking) { // 일단 무조건 여기에 걸린다.
// 세션 체킹 중이라는 페이지 렌더
}
if (sessionValid) {
// 원래 라우트와 컴포넌트로 렌더
} else {
// 세션이 유효하지 않기 때문에 로그인 페이지로 리다이렉트
}
}
}
무조건 SessionCheckBeforeRoute
에 들어오는 이상 세션 체킹 페이지 가 렌더된다.
여기서 redux의 isSessionChecking
값은 false 이다.
CHECK_SESSION_START
가 패치될때 그제서야 redux의 isSessionChecking
이 true 로 바뀐다.
여전히 세션 체킹 중이라는 페이지가 떠있다.
CHECK_SESSION_SUCCESS
/CHECK_SESSION_FAIL
이 끝나고 CHECK_SESSION_FIN
이 되면 isSessionChecking
이 false 로 변하면서 원하는 컴포넌트가 렌더된다.
다음번에 SessionCheckBeforeRoute
로 들어오면 isSessionChecking
state는 true 라서 위와 같은 방식으로 동작하게 된다.
[ ] 12. "영상을 끝까지 봐야지 문제풀었다는 정보가 등록된다"라는 텍스트 영상에 추가해놓기.
9월13일 테스트
첫 로그인 바로 화면 안넘어감: 로딩 중인걸 표시해줘야함.컨트롤러 바 클릭했을 때 그 시간대로 안 넘어감9월 17일 테스트
문제 한 번만 풀 수 있도록 만들기 - 다시 문제 풀 수 있긴하지만 등록이 안되도록!/v/:id - invalid한 아이디로 들어가면 무한루프에 빠짐: 에러핸들링 해줘야함댓글 내용 아무것도 없을 때 댓글 등록안되게!10월 7일 테스트
10월 10일 테스트
google login 클릭한 후 구글 로그인하지 않고 창을 닫으면 "flass 잠시만 기다려주세요" 그대로 떠있음 shorten 링크 타고 들어가서 (클래스팅 로그인 안되어있을 경우) 클래스팅 로그인하면 shorten 링크로 가는 게 아니라 홈화면으로 간다
10월 14일
*동영상 업로드 시에 문제 넣을 때, 동영상 시간 바 hover효과가 없어! 바가 거의 안보여서 불편합니다! 아이들 동영상 시청할 때처럼만 바꿔주면 좋겠어요~~~~