JSX未终止解析错误排查:我的fetch函数中JSX写法是否正确?
React项目解析错误:Unterminated JSX contents 排查与修复
解析错误核心说明
错误提示Line 10:78: Parsing error: Unterminated JSX contents. (10:78)表明代码中存在JSX元素未正确闭合、语法不完整的情况。结合你提供的代码,以下是具体问题排查与修复方案:
代码中的关键错误及修复
1. UserContext中fetch函数重名问题
你在UserProvider中定义的函数名为fetch,会覆盖全局fetch API,导致内部调用await fetch(...)时递归调用自身,无法正常发起请求。
修复:
将函数名改为login或其他名称:
const login = async (user_name, password) => { const response = await fetch('http://localhost:3500/users', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ user_name, password }), }); const data = await response.json(); if (response.ok) { setUser(data); } else { throw new Error(data.message); } }; // 更新Provider的value return ( <UserContext.Provider value={{ user, login }}> {children} </UserContext.Provider> );
2. LoginForm中navigate变量声明顺序错误
你在handleSubmit函数中调用navigate,但navigate变量在函数之后才声明,会导致运行时ReferenceError。
修复:
调整声明顺序:
const navigate = useNavigate(); const handleSubmit = (values, { setSubmitting}) => { fetch(values.user_name, values.password); setSubmitting(false); navigate('/MainGrid'); };
3. LoginForm中Formik与本地state冗余
你同时使用Formik的values和自己维护的user_name、password state,既冗余又会导致表单值不同步。
修复:
删除本地state,直接使用Formik提供的属性:
// 删除以下两行 // const [user_name, setUsername] = useState(''); // const [password, setPassword] = useState(''); // 修改input的value和onChange <input type="text" className="form-control form-control" name="user_name" value={values.user_name} onChange={handleChange} required /> <input type="password" className="form-control form-control" name="password" value={values.password} onChange={handleChange} required />
4. UserContext导出方式错误
你使用export default { UserContext, UserProvider }导出,但LoginForm中用import {UserContext} from '../../Context/UserContext'导入,会导致解构失败(default export是对象,不是命名导出)。
修复:
改为命名导出:
// UserContext.js export const UserContext = createContext(); export const UserProvider = ({ children }) => { ... }; // LoginForm.js import { UserContext } from '../../Context/UserContext';
解析错误补充排查
如果上述修改后仍存在解析错误,建议检查:
- 所有JSX标签是否严格闭合(推荐自闭合标签写法,如
<img />而非<img></img>) - JSX中的表达式
{}是否都正确闭合 - 代码中是否存在中文括号、引号等非法字符
- 编辑器行号对应位置的代码,是否因换行或缩进导致语法误判
内容的提问来源于stack exchange,提问作者ANARKID
相关产品推荐
相关产品推荐

