ログインに成功した後、新しいページにリダイレクトしたいと思います。 ルート(V4)は、このように使用されていますサガに履歴インスタンスを提供するにはどうすればよいですか?
import { browserHistory } from '....browser_history_signleton';
export function* loginSaga() {
while (true) { // eslint-disable-line no-constant-condition
try {
const payload = yield take(LOGIN_SUBMIT);
const raceResult = yield race({
signin: call(loginRequest, payload),
logout: take('LOGOUT')
});
if (raceResult.signin) {
const { data } = raceResult.signin;
yield put(loginRequestSucceeded(data));
const redirectUrl = `.....based on location.state.from.pathname`
browserHistory.push(rediretUrl);
...
私の主な問題はbrowserHistory
を共有する方法である:よう
import { browserHistory } from '....browser_history_signleton';
...
class App extends Component {
render() {
const { authentication: { isSignedIn } } = this.props;
return (
<ConnectedRouter history={browserHistory}>
<div>
<Header/>
<Route exact path="/" component={Home}/>
<PrivateRoute isAuthorized={isSignedIn} path="/page1" component={PageOne}/>
<PrivateRoute isAuthorized={isSignedIn} path="/page2" component={PageTwo}/>
</div>
</ConnectedRouter>
);
}
}
サガが見えます。 history
モジュールから createHistory
はsignletonではないので、私は追加する必要がありました:
// browser_history_signleton.js
import createHistory from 'history/createBrowserHistory';
export const browserHistory = createHistory();
佐賀history
インスタンスを提供するための最も効率的な方法は何ですか?
ちょっと、私は今、同じ問題を抱えています。解決策を見つけることができますか? – mrTurkay
与えられた解決策は私が覚えている限り働いていた:const redirectUrl = = browserHistory.location.state.from.pathname; – DraganS
店舗を作成してルートサガを実行しているときに履歴オブジェクトを持っている場合は、それをルートサガの引数として渡すことができます。次にloginSagaへのargとして再度渡すか(loginSagaの深度によっては複数のサガを使用することもできます)、またはsetContext/getContextエフェクトを使用して履歴オブジェクトをルートサガに格納してから、 loginSaga、 –