Вы не можете передать функцию в свойстве состояния для поддержки перенаправления.Разрешены только сериализуемые данные.Это следует за поведением нативного API истории, который используется пакетом истории, который использует реагирующий маршрутизатор.См. эту проблему для более подробной информации.Также обратите внимание на то, что в комментариях часто не рекомендуется использовать состояние
Несмотря на соблазн прохождение состояния через location.state, я бы предостерег от использования его для чего-либо, кроме эфемерных данных.Когда вы переходите непосредственно к странице, location.state всегда имеет значение null, поэтому вам придется иметь встроенные средства защиты, чтобы справиться с этим.
Чтобы обрабатывать различные варианты поведения в форме входа в системуосновываясь на том, откуда они перенаправляются, я, вероятно, передам некоторые сериализуемые данные в строку запроса, а затем использую эти данные, чтобы решить, что делать в компоненте, отображаемом в /login
.Вот как то так:
// Redirect
<Redirect to={`/login?param1=a`} />
// Login component
import qs from "qs";
class Login extends React.Component {
login = () => {
const { param1 } = qs(this.props.location.search);
if (param1 === "a") {
// Do something
} else {
// Do something else
}
}
render() {
<button onClick={this.login} type="button">Login</button>
}
}