发起后端请求是否需要useEffect?附请求报错及代码求助
前端发起后端请求是否需要使用useEffect?
核心结论:不是必须用,得看触发时机
- 如果是用户交互触发的请求(比如你代码里的表单提交
handleSubmit),直接写在事件处理函数里就完全没问题,不需要套useEffect。 - 只有当请求需要在组件挂载时自动触发(比如页面加载就拉取初始化数据),或者某个状态/属性变化时自动重新请求(比如筛选条件变更后自动刷新列表),才需要用useEffect来监听依赖并执行请求。
顺带说下你遇到的两个报错(和useEffect无关)
- 431 (Request Header Fields Too Large):这是请求头或者URL路径里的内容过大导致的。你可以检查下
search或searchType的值是不是过长,或者请求头里有没有额外携带大体积的字段。 - Unexpected end of JSON input:因为后端返回的不是合法JSON(大概率是431错误导致后端没返回正常响应),所以
resp.json()解析失败。可以给代码加个简单的错误处理:
const handleSubmit = async (event) => { event.preventDefault(); try { const resp = await fetch(`/abc/${searchType}/${search}`); if (!resp.ok) { console.error('请求失败,状态码:', resp.status); setData(null); return; } const json = await resp.json(); if (json.success) { setData(json.thing); } else if (json.error) { setData(null); } } catch (err) { console.error('请求或解析出错:', err); setData(null); } };
内容的提问来源于stack exchange,提问作者Ry2254
相关产品推荐
相关产品推荐

