와 라우터 V4 반응하고 난 사용자가 로그인하지 않은 경우 리디렉션 개인 보호 경로의 사용을 만들고 싶어.는 REDUX 보호 경로와 인증
내가이 경로 구성 요소가 :
class Routes extends Component {
render() {
const { auth } = this.props;
// so checks against isAuthenticated can pass
if (auth.isAuthenticated !== undefined) {
return (
<div>
<Route exact component={() => <Home />} />
<PublicRoute
authed={() => auth.isAuthenticated}
path="/login"
component={(routerProps) => <Login {...routerProps} />}
/>
<PublicRoute
authed={() => auth.isAuthenticated}
path="/register"
component={(routerProps) => <Register {...routerProps} />}
/>
<PrivateRoute
authed={() => auth.isAuthenticated}
path="/dashboard"
component={Dashboard}
/>
</div>
);
} else {
return <div></div>
}
}
}
function mapStateToProps(state) {
return {
auth: state.auth
}
}
export default withRouter(connect(mapStateToProps)(Routes));
는 다음과 같이 구현됩니다
class Main extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
store.dispatch(checkAuth());
}
render() {
return (
<Provider store={store}>
<Router>
<Theme>
<Routes />
</Theme>
</Router>
</Provider>
);
}
}
이것은 PrivateRoute입니다 :
export function PrivateRoute({ component: Component, authed, ...rest }) {
const isAuthenticated = authed();
return (
<Route
{...rest}
render={props =>
isAuthenticated === true ? (
<Component {...props} />
) : (
<Redirect
to={{
pathname: "/login",
state: { from: props.location }
}}
/>
)
}
/>
);
}
auth
소품을 전달하는 가장 좋은 방법은 무엇입니까? 경로 구성 요소를 연결하고 거기에서 auth
을 전달하면 괜찮습니까? 그렇지 않으면 다른 곳에서 전달해야하며 필요로하는 각 구성 요소를 연결해야합니다. 거기에서? 또한이 방법은 중첩 된 경로 (예 : /dashboard/settings
)와 어떤 관련이 있습니까? 덕분에 실제로
경우, 당신은 단지 직접'PrivateRoute'를 연결할 수 있습니다. –
@RobertFarley 네, 저것을 시도 할 것입니다, 고마워요! – Case09
@RobertFarley하지만 많은 PrivateRoute를 연결하면 성능 문제가 발생합니까? –