onEnter
をrender
に置き換えました。ルータのv4仕様に合わせてコードを変更しました。ポイントはログインしたときに/signup
ページが表示されないようにすることでした。自分のコードで何が間違っていますか?リダイレクトルータv4リダイレクトが失敗する
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'));
});
ありがとうございます。 docリンクを修正してください。それはドキュメントの始まりにつながります –
実際に意図的だったのは、最初のインストールセクションの右に、BrowserRouterの使用方法が示されているからです。しかし有用なのであれば、ここにBrowserRouterへのリンクがあります:https://reacttraining.com/react-router/web/api/BrowserRouter – Casey
' BrowserRouterから' history = {history} 'を削除しました。 > '。 'history'オブジェクトは' this.props.history.push( '/ login'); 'のように' MyLink'コンポーネントでアクセスされます。アプリは正常に動作し続けているようです。これは、BrowserRouterの使用に関してあなたが言いましたか? –