reactjs - 为什么我的 useHistory 即使在路由器中也未定义?
问题描述
我正在尝试使用 react 组件中的 history.push ,但它会引发历史未定义的错误。
这个 index.js 文件:
ReactDOM.render(
<React.Fragment>
<Provider store={store}>
<Router>
<App />
</Router>
</Provider>
</React.Fragment>,
document.getElementById("root")
);
这是 App.js:
function App() {
return (
<AuthenticatedUser>
<Routers></Routers>
</AuthenticatedUser>
);
}
Routers.js 文件包含交换机内的所有路由:
export default function Routers() {
return (
<Switch>
<Route exact path="/" component={Books}></Route>
<Route exact path="/login" component={LoginForm}></Route>
<Route exact path="/librarians" component={Librarians}></Route>
<Route exact path="/customers" component={Customers}></Route>
<Route
exact
path="/all-borrowed-books"
render={(props) => <BorrowedBooks {...props} all={true} />}
></Route>
<Route exact path="/my-borrowed-books" component={BorrowedBooks}></Route>
<Route
exact
path="/all-returned-books"
render={(props) => <ReturnedBooks {...props} all={true} />}
></Route>
<Route exact path="/my-returned-books" component={ReturnedBooks}></Route>
<Route exact path="/register" component={SignUpForm}></Route>
</Switch>
);
}
还有我的 AuthenticatedUser.js 文件:
function AuthenticatedUser(props) {
return (
<>
<SideMenu />
<Header />
<div>{props.children}</div>
</>
);
}
export default AuthenticatedUser;
现在在我收到错误的 Header.js 文件中,我正在尝试在注销功能中使用 useHistory 钩子进行 history.push 。这是代码:
const Header = (props) => {
const classes = useStyles();
const { history } = useHistory();
const logOut = () => {
history.push('/login')
// clearLocalStorage();
};
return (
<AppBar position="static" className={classes.root}>
<Toolbar>
<Grid container alignItems="center">
<Grid item>
<InputBase
placeholder="Seach topic"
className={classes.searchInput}
startAdornment={<SearchIcon fontSize="small" />}
/>
</Grid>
<Grid item sm></Grid>
<Grid item>
<ActionButton onClick={logOut}>
<ExitToAppIcon></ExitToAppIcon>
</ActionButton>
</Grid>
</Grid>
</Toolbar>
</AppBar>
);
};
export default Header;
据我所知,由于我的 App 组件位于 BrowserRouter 中,因此应用程序中的所有组件都应该可以访问浏览器历史记录。但显然我错了。有人可以澄清一下。
解决方案
根据文档:
https://reactrouter.com/web/api/Hooks/usehistory
useHistory 返回单个历史实例,而不是具有历史实例成员的对象
const history = useHistory()
通过使用解构,您实际上是在引用不存在的 history.history。
推荐阅读
- ios - 当它们嵌入导航控制器时,标签栏无法识别视图控制器
- python - Impyla - 用户没有执行“SELECT”的权限
- r - VIF 无拦截:vifs 可能不明智
- python - Errno 13 权限被拒绝:'tmp\\csv.gz
- smtp - 后缀:损坏的 SMTP 事务?
- java - 如果我有一个用作复合键的实体,JPA 级联是否也构成复合键的一部分?
- python-3.x - 烧瓶中的多对多过滤器
- java - 在 ARCore 中放置锚点之前我们应该等待多长时间?在云锚开始显着漂移之前,我们可以离它多远?
- sqlite - 循环中的 SELECT 查询
- python - 在python中打印方法的返回