javascript - 使用 history.push 时,不会呈现以下屏幕
问题描述
更改屏幕时,使用 history.push 不会加载新屏幕。
我看过一些关于它的帖子,但实际上没有任何解决方案有帮助。
ReactDOM.render(
<Router history={history}>
<Provider store={store}>
<React.StrictMode>
<App />
</React.StrictMode>
</Provider>
</Router>,
document.getElementById('root')
);
以上是我的主要组件,我使用redux的地方
const isLogged = localStorage.getItem('user')
const PrivateRoute = (props) => {
return isLogged ? <Route {...props} /> : <Redirect to="/login" />
}
const App = () => {
return (
<MuiThemeProvider theme={theme}>
<div className="container-fluid p-0" style={{ backgroundColor: 'rgba(0,0,0,0.2)', }}>
<Switch>
<Route exact path='/login' component={Login} />
<PrivateRoute exact path="/" component={Dashboard} />
</Switch>
<AlertComponent />
</div>
</MuiThemeProvider>
);
}
这是我的路由组件,其中有登录屏幕和应用程序的主屏幕。
const authenticate = () => {
setLoading(true)
UserService.login(email, password, (response) => {
setLoading(false)
response.error ?
dispatch(createAlertError('Email e/ou senha inválida'))
:
dispatch(userSignInSuccess(response.user.shift()))
history.push('/')
})
}
在我的登录组件中,当调用此函数时,路由会发生变化,但新组件不会更新。
这是存储库链接
解决方案
您的代码中有一些问题可以更正
在您的主要组件中,不要将 Provider 包装为<Router>
, wrap in <Provider />
,这样路由处理程序就可以访问商店。了解更多点击
ReactDOM.render(
<Provider store={store}>
<React.StrictMode>
<App />
</React.StrictMode>
</Provider>,
document.getElementById('root')
);
在您App.js
使用<Router>
并且不需要在那里注入历史对象时,当您使用反应路由器时,连接的组件将可以访问它。
就像<PrivateRoute>
创建一个额外的组件一样<PublicRoute>
,它将执行完全相反的检查<PrivateRoute>
const isLogged = localStorage.getItem('user')
const PrivateRoute = (props) => {
return isLogged ? <Route {...props} /> : <Redirect to="/login" />
}
const App = () => {
return (
<MuiThemeProvider theme={theme}>
<div className="container-fluid p-0" style={{ backgroundColor: 'rgba(0,0,0,0.2)', }}>
<Router>
<Switch>
<Route exact path='/login' component={Login} />
<PrivateRoute exact path="/" component={Dashboard} />
</Switch>
</Router>
<AlertComponent />
</div>
</MuiThemeProvider>
);
}
尝试以上步骤,让我知道您的进度,谢谢
推荐阅读
- amazon-s3 - AWS S3 上传完整性检查
- python - 点积的矩阵泛化
- ballerina - 在 Ballerina 中将 XML 转换为字符串
- javascript - 动态对象的模式
- amazon-web-services - 如何在 Cloudwatch 中使用数学表达式来显示指定时间范围内的总延迟
- javascript - 脚本的“第 1 行,第 1 列”错误
- reactjs - 根据图例高度更改 cy 百分比
- javascript - 模态,一个脚本同侧
- visual-studio - 在另一个解决方案(visual studio)中通过dll调试源代码
- postgresql - 是否可以看到从 pgAdmin 导入作业生成的脚本?