从 Context Provider 重定向 React Router
Redirect React Router from Context Provider
我是 React Router 的新手,正在尝试使用新的 Conext API 从提供商内部进行重定向。基本上我的供应商是这样的。
/* AuthContext.js */
class AuthProvider extends React.Component {
state = { isLoggedIn: false }
constructor() {
super()
this.login = this.login.bind(this)
this.logout = this.logout.bind(this)
}
login() {
this.setState({ isLoggedIn: true })
// Need to redirect to Dashboard Here
}
logout() {
this.setState({ isLoggedIn: false })
}
render() {
return (
<AuthContext.Provider
value={{
isLoggedIn: this.state.isLoggedIn,
login: this.login,
logout: this.logout
}}
>
{this.props.children}
</AuthContext.Provider>
)
}
}
const AuthConsumer = AuthContext.Consumer
export { AuthProvider, AuthConsumer }
我已经阅读了很多关于如何使用 props 传递历史对象以及如何使用组件的内容,但我看不到这些方法在这里如何工作。我的上下文提供者位于树的顶部,因此它不是路由器的子级,因此我无法传递道具。它也不是标准组件,所以我不能只插入一个组件,除非我误解了什么(这是很有可能的)。
编辑: 看起来要走的路是 withRouter,但是如何在上面的代码中导出我的 AuthProvider,以便 history.push 在我的登录功能中可用?如您所见,我正在导出多个包装在 {} 中的组件,因此您可以将其中之一包装在 HOC 中吗?您是否必须显式传递历史记录,或者它是否始终在被包装的组件内可用?
使用 withRouter 之类的方法来访问历史记录。
const AuthButton = withRouter( ({ history }) =>history.push("/"));
试试这个:
import { Route } from "react-router-dom";
class AuthProvider extends React.Component {
yourFunction = () => {
doSomeAsyncAction(() =>
this.props.history.push('/dashboard')
)
}
render() {
return (
<div>
<Form onSubmit={ this.yourFunction } />
</div>
)
}
}
export default withRouter(AuthProvider);
最好的解释可以在这里找到:
我是 React Router 的新手,正在尝试使用新的 Conext API 从提供商内部进行重定向。基本上我的供应商是这样的。
/* AuthContext.js */
class AuthProvider extends React.Component {
state = { isLoggedIn: false }
constructor() {
super()
this.login = this.login.bind(this)
this.logout = this.logout.bind(this)
}
login() {
this.setState({ isLoggedIn: true })
// Need to redirect to Dashboard Here
}
logout() {
this.setState({ isLoggedIn: false })
}
render() {
return (
<AuthContext.Provider
value={{
isLoggedIn: this.state.isLoggedIn,
login: this.login,
logout: this.logout
}}
>
{this.props.children}
</AuthContext.Provider>
)
}
}
const AuthConsumer = AuthContext.Consumer
export { AuthProvider, AuthConsumer }
我已经阅读了很多关于如何使用 props 传递历史对象以及如何使用组件的内容,但我看不到这些方法在这里如何工作。我的上下文提供者位于树的顶部,因此它不是路由器的子级,因此我无法传递道具。它也不是标准组件,所以我不能只插入一个组件,除非我误解了什么(这是很有可能的)。
编辑: 看起来要走的路是 withRouter,但是如何在上面的代码中导出我的 AuthProvider,以便 history.push 在我的登录功能中可用?如您所见,我正在导出多个包装在 {} 中的组件,因此您可以将其中之一包装在 HOC 中吗?您是否必须显式传递历史记录,或者它是否始终在被包装的组件内可用?
使用 withRouter 之类的方法来访问历史记录。
const AuthButton = withRouter( ({ history }) =>history.push("/"));
试试这个:
import { Route } from "react-router-dom";
class AuthProvider extends React.Component {
yourFunction = () => {
doSomeAsyncAction(() =>
this.props.history.push('/dashboard')
)
}
render() {
return (
<div>
<Form onSubmit={ this.yourFunction } />
</div>
)
}
}
export default withRouter(AuthProvider);
最好的解释可以在这里找到: