随着onEnter替换为render我改变了我的代码相匹配的路由器V4规格。重点是防止/signup页面在登录时显示。我在代码中遗漏了什么?
import React from 'react';
import ReactDOM from 'react-dom';
import {Meteor} from 'meteor/meteor';
import {BrowserRouter, Route, Redirect, Switch} from 'react-router-dom';
import browserHistory from 'history';
import {Tracker} from 'meteor/tracker';
import Signup from '../imports/ui/Signup';
import MyLink from '../imports/ui/MyLink';
import NotFound from '../imports/ui/NotFound';
import Login from '../imports/ui/Login';
const history = browserHistory.createBrowserHistory();
const unathenticatedPages = ['/', '/signup'];
const athenticatedPages = ['/mylink'];
const onEnterPublicPage = () => {
if (Meteor.userId()) {
return <Redirect to="/mylink/" />;
}
};
const routes = (
<BrowserRouter history={history}>
<Switch>
<Route exact path="/" component={Login} render={() => onEnterPublicPage} />
<Route path="/signup" component={Signup} render={() => onEnterPublicPage} />
<Route path="/login" component={Login} />
<Route path="/mylink" component={MyLink} />
<Route path="*" component={NotFound} />
</Switch>
</BrowserRouter>
);
Tracker.autorun(() => {
const isAuthenticated = !!Meteor.userId();
const pathname = history.location.pathname;
const isUnathenticatedPage = unathenticatedPages.includes(pathname);
const isAthenticatedPage = athenticatedPages.includes(pathname);
if (isAuthenticated && isUnathenticatedPage) {
history.push('/mylink');
} else if (!isAuthenticated && isAthenticatedPage) {
history.push('/');
}
});
Meteor.startup(() => {
ReactDOM.render(routes, document.getElementById('app'));
});