프론트엔드 정복하기
Route 제한적 접근 HOC관리 본문
/hoc/Register_AG_2_Restrict.j
import React from 'react';
import {useSelector} from 'react-redux';
export default function(RegisterAG2stepComponent){
function CheckGoTo2step(props){
const user = useSelector(state => state.user);
if(!user.agreeSave/* .agreeUsage && !user.agreeSave.agreePersonal */){
alert('잘못된 경로로 접근하셨습니다.')
props.history.push('/register_agmall');
}
return <RegisterAG2stepComponent {...props} />
}
return CheckGoTo2step
}
/App.js
import Register_AG_2_restrict from '../hoc/Register_AG_2_restrict'
function App() {
return (
<div style={{minWidth:"1200px", margin:"0 auto", overflow:"auto"}}>
<Switch>
<Route exact path="/Register_AGmall_2step" component={Register_AG_2_restrict(Register_AGmall_2step)}/>
</Switch>
</div>
);
}
export default App;
*AG 1단계 => user.agreeSave.agreeUsage=true, user.agreeSave.agreePersonal=true 정보를 store에 저장
*AG 2단계 => useEffect에서 위 2개 정보를 각각 ''로 변경(dispatch로 variable=...''값을 전송)
=> user.agreeSave가 !이면 잘못된 경로 메세지 전송
※ error
if( user.agreeSave.agreeUsage==='') 로 조건을 걸었을 때 property를 찾을 수 없다는 오류가 발생.
=>user는 store, agreeSave는 action명 중에 하나이나, agreeUsage는 전달 변수 이기 때문에 아예 존재하지 않을 때도 있다.
=>따라서 변수가 아닌 store, action 명으로 조건을 걸어야 할 것으로 판단됨.
해결 : if ( user.agreeSave && user.agreeSave.agreeUsage === '')
user의 agreeSave(action명 등 탐색가능한 요소)가 있는지 체크하고 && 그 하위 변수의 상태를 체크한다.
'React > 기본 사용법' 카테고리의 다른 글
React에서 DOM 이벤트 다루기 (1) | 2021.03.11 |
---|---|
React | Link태그와 a태그 (0) | 2020.10.21 |
클래스 컴포넌트란 (0) | 2020.06.23 |
DOM에 직접접근을 해야할 때 (0) | 2020.06.22 |
웹사이트에 react 추가하기(react 공식사이트) (0) | 2020.06.19 |