#javascript #reactjs #ajax #redirect #browser-history
#javascript #reactjs #ajax #перенаправление #браузер-история
Вопрос:
Я пытаюсь перенаправить свою страницу после входа в систему, используя .then
тип ajax. Все работает, кроме history.push()
команды:
axios
.post('http://localhost:8080/login', {
email,
password
})
.then((res) => {
sessionStorage.token = res.data.token;
const { sub } = JSON.parse(atob(res.data.token.split('.')[1]));
sessionStorage.email = sub;
})
.then(() => history.push("/reservations"))
.catch(() => setError(connectionError))
}
Вместо перенаправления он правильно входит в систему, но не меняет страницу. Страница обновляется при обновлении, но перенаправление по-прежнему отсутствует.
Не уверен, имеет ли это значение, но вот мой маршрут:
<Route path="/reservations" exact component={Reservations}/>
Помощь очень ценится
Комментарии:
1. Могут быть и другие проблемы, но
.then(history.push("/reservations"))
это неправильно. Так и должно быть.then(() => history.push("/reservations"))
.2. Привет, я столкнулся с той же проблемой. Нашли ли вы решение для этого?
Ответ №1:
Что-то не так с синтаксисом последнего .then
. Разве это не должен быть метод обратного вызова, внутри которого вы будете вызывать history.push
?
Что — то вроде этого:
axios
.post('http://localhost:8080/login', {
email,
password
})
.then((res) => {
sessionStorage.token = res.data.token;
const { sub } = JSON.parse(atob(res.data.token.split('.')[1]));
sessionStorage.email = sub;
})
.then(() => history.push("/reservations"))
.catch(() => setError(connectionError))
}
Комментарии:
1. Я пробовал это, но он все равно не перенаправлял
2. Сможете ли вы воспроизвести это с помощью образца StackBlitz или CodeSandbox ?
Ответ №2:
Я добавлю ответ от SiddAjmera, если история по-прежнему не работает, вам нужно добавить историю пакетов
история установки npm
index.js
import React from "react";
import ReactDOM from "react-dom";
import { Router } from "react-router";
import { createBrowserHistory } from "history";
export const history = createBrowserHistory();
ReactDOM.render(
<Router history={history}>
<App />
</Router>,
node
);
import {history} from "./index"
axios
.post('http://localhost:8080/login', {
email,
password
})
.then((res) => {
sessionStorage.token = res.data.token;
const { sub } = JSON.parse(atob(res.data.token.split('.')[1]));
sessionStorage.email = sub;
})
.then(() => history.push("/reservations"))
.catch(() => setError(connectionError))
}
Комментарии:
1. Я попробую это сделать, но я использую
useHistory
изreact-router-dom
Ответ №3:
Попробуйте сделать это таким образом:
axios
.post('http://localhost:8080/login', {
email,
password
})
.then((res) => {
sessionStorage.token = res.data.token;
const { sub } = JSON.parse(atob(res.data.token.split('.')[1]));
sessionStorage.email = sub;
history.push("/reservations");
})
.catch(() => setError(connectionError))
}
Ответ №4:
Измените .then(history.push("/reservations"))
на .then(() => history.push("/reservations"))
.