reactjs - 不能在 react-router-dom 组件中使用 React 钩子
问题描述
为什么我不能在路由直接组件中使用反应钩子,在其他地方我可以使用钩子没有问题发生。任何人都可以回答这个问题,我如何在这些组件中使用钩子
这是错误
./src/Pages/bookingPage.js 第 6:29 行:React Hook "useState" 在函数 "bookingPage" 中被调用,该函数既不是 React 函数组件也不是自定义 React Hook 函数 react-hooks/rules-of-hooks
搜索关键字以了解有关每个错误的更多信息。
这是我的 app.js
import React, { useState } from 'react';
import './App.css';
import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom';
import AuthPage from './Pages/authPage'
import EventPage from './Pages/eventPage'
import BookingPage from './Pages/bookingPage';
import MainNavigator from './component/MainNavigator';
import AuthContext from './component/context/auth-context';
function App() {
const [token, setToken] = useState(null);
const [userId, setUserId] = useState(null);
const login = (token, userId, expirationTime) => {
setToken(token);
setUserId(userId);
}
const logout = () => {
setToken(null);
setUserId(null);
}
return (
<Router>
<React.Fragment>
<AuthContext.Provider value={{ token: token, userId: userId, login: login, logout: logout }}>
<MainNavigator />
<Switch>
{!token && <Redirect from="/" to="/auth" exact />}
{token && <Redirect from="/" to="/events" exact />}
{token && <Redirect from="/auth" to="/events" exact />}
{!token && <Route path="/auth" component={AuthPage} />}
<Route path="/events" component={EventPage} />
{token && <Route path="/bookings" component={BookingPage} />}
</Switch>
</AuthContext.Provider>
</React.Fragment>
</Router>
);
}
export default App;
这是我的预订页面组件
import React, { useState } from 'react'
import { Grid, } from '@material-ui/core';
import '../App.css';
const bookingPage = () => {
const [book, setBook] = useState(false);
return (
<Grid container className='container_booking'>
<Grid item lg={12} sm={12} xs={12}>
<h1>bookibPage</h1>
{book}
<button onClick={() => setBook(true)}>click me</button>
</Grid>
</Grid>
)
}
export default bookingPage
解决方案
从 React 函数组件调用 Hooks。
阅读这个React-Hooks 规则
将函数名称更改为BookingPage
const BookingPage = () => {
const [book, setBook] = useState(false);
return (
<Grid container className='container_booking'>
<Grid item lg={12} sm={12} xs={12}>
<h1>bookibPage</h1>
{book}
<button onClick={() => setBook(true)}>click me</button>
</Grid>
</Grid>
)
}
export default BookingPage
推荐阅读
- html - 如何将折叠菜单放在右下角?
- clojure - 使用重新框架运行测试同步包装测试的宏不起作用
- arm - RISC-V 架构中 32x64 的含义
- mysql - 仅当记录包含所有行的相同列值时才选择记录
- c# - 没有在 CustomSimilarity 上调用 ScorePayload
- agora.io - Agora.io 集成页面销售选项
- algorithm - 具有唯一但随机生成的字符串的短 URL?
- react-native - 如何在另一个堆栈的屏幕 C 中删除来自另一个堆栈的屏幕 A 的背景屏幕
- html - 两个 div 元素需要并排
- javascript - HTML 上 POST/DELETE 链接的最佳实践