로그인 성공 후 새 페이지로 리디렉션하고 싶습니다. 라우트 (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가 얼마나 깊은 지에 따라 여러 개의 Sagas를 통해 전달할 수도 있음) 또는 setContext/getContext 효과를 사용하여 루트 사가에 기록 개체를 저장 한 다음 loginSaga, –