React 18.2.0中useNavigate Hook跳转失效问题求助
可能的原因及修复步骤
1. 检查路由配置是否正确
确保你的路由配置文件(如App.js)中已正确注册/thank路径对应的感谢页组件,并且所有路由都包裹在BrowserRouter内:
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import Home from './Home'; import ThankYou from './ThankYou'; // 替换为你的感谢页组件路径 import Admin from './Admin'; // 替换为你的管理页组件路径 function App() { return ( <Router> <Routes> <Route path="/" element={<Home />} /> <Route path="/thank" element={<ThankYou />} /> <Route path="/admin" element={<Admin />} /> </Routes> </Router> ); } export default App;
2. 修正表单提交逻辑的分支判断
原代码中使用两个独立的if判断error和data,可能存在逻辑覆盖的问题。改为if-else分支,确保在无错误时执行跳转:
修改handleSubmit函数:
const handleSubmit=async(e)=>{ e.preventDefault() if(!fname || !lname || !age || !email ||!phone ){ setFormError('请填写所有必填字段') return } const {data,error} = await supabase .from('profiles') .insert([{fname,lname,age,email,phone}]) if(error){ console.error(error) setFormError('检查网络连接或数据是否合法') } else { console.log(data) setFormError(null) navigate('/thank') } }
3. 确认组件在路由上下文内
useNavigate必须在Router组件包裹的上下文环境中使用,确保Home组件不是直接在index.js中渲染,而是通过路由配置由Router管理。
4. 检查浏览器控制台报错
打开浏览器开发者工具的控制台,查看是否存在路由相关错误、Supabase请求错误或其他JS报错,这些都可能导致跳转逻辑无法执行。
额外提示(非跳转问题,但影响功能)
当前代码中所有复选框绑定了同一个isChecked状态,会导致所有复选框同时选中/取消。如果需要单独控制每个复选框,应为每个复选框创建独立的状态变量,例如:
const [confirmChecked, setConfirmChecked] = useState(false); const [medicalChecked, setMedicalChecked] = useState(false); // 其他复选框同理
内容的提问来源于stack exchange,提问作者Revaycolizer
相关产品推荐
相关产品推荐

