-
动作type
在减速器中用于区分不同的动作。通常不会以状态保存它。
-
为响应type==="LOGGED_IN"
的操作,您在reducer中更改了状态,因此Redux(状态)知道用户已经登录。
您的减速器和状态可以是
interface UserState {
userName?: string;
isLoggedIn: boolean;
}
const initalUserState: UserState = {
isLoggedIn: false,}
type KnownActions = LoggedIn | LoggedOut;
const reducer: Reducer<UserState,KnownActions> = (state = initalUserState,action) => {
switch(action.type) { // Here is type comes into play
case 'LOGGED_IN':
return { ...state,isLoggedIn: true,userName: action.userName }
case 'LOGGED_OUT':
return { ...state,isLoggedIn: false,userName: undefined }
default:
return state;
}
}
如果您使用的是React路由器,则可以创建专用路由,该路由将仅显示登录用户的数据。例如
import { Redirect,Route,RouteProps,RouteComponentProps } from 'react-router-dom'
interface PrivateRouteOwnProps {
Render: ((props: RouteComponentProps<any>) => React.ReactNode)
}
interface PrivateRouteStateProps {
isLoggedIn: boolean;
}
type PrivateRouteProps = PrivateRouteOwnProps & PrivateRouteStateProps & RouteProps
const PrivateRoute: FC<PrivateRouteProps> = ({Render,isLoggedIn,...rest}) => {
return <Route {...rest}
render={() => (
isLoggedIn ?
Render(props)
:
<Redirect to={"/home"}/>
)}
/>
}
export default connect((state) => ({isLoggedIn: state.isLoggedIn}))(PrivateRoute)
和用法
<Switch>
<PrivateRoute exact path='/page1' Render=(() => <Page1/>)/>
// ...
</Switch>
现在<Page1/>
仅为登录用户呈现。并且在注销的情况下,用户将被重定向到“ / home”。
本文链接:https://www.f2er.com/2995723.html