【发布时间】:2021-08-21 20:00:15
【问题描述】:
我在 React 17 中有这段代码
useEffect(() => {
getLocalJson('../json/login/login.json', props.headers)
.then(resp => {
setFields(resp);
});
}, [props.headers]);
而getLocalJson 方法位于不同的文件中:
export const getLocalJson = async (url, headers) => {
console.log(url)
const resp = await fetch(url, {'headers': headers});
const json = await resp.json();
return json;
}
但是从公用文件夹加载本地 JSON 文件的调用是:
请求网址:http://localhost:3000/json/login/%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C %5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx %5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson%5Clogin%5C%5Cdx%5Cjson %5Clogin%5C%5Cdx%5Cjson%5Clogin%5Clogin.json
这是 JSON
[
{
"order": 0,
"systemName": "title",
"friendlyName": "Login",
"dataType": {
"type": "TITLE"
}
},
{
"order": 1,
"required": true,
"systemName": "username",
"friendlyName": "Username",
"errorMsg": "Invalid username",
"dataType": {
"type": "TEXT"
}
},
{
"order": 2,
"required": true,
"systemName": "password",
"friendlyName": "Password",
"errorMsg": "Invalid password",
"dataType": {
"type": "PASSWORD"
}
},
{
"order": 3,
"systemName": "title",
"friendlyName": "Login",
"dataType": {
"type": "BUTTON",
"submit": true
}
}
]
它会一遍又一遍地打电话
这个确切的代码在我的 ubuntu 开发盒上工作,但在我的 windows 盒上却失败了
【问题讨论】:
-
“它会一遍又一遍地调用” -
setFields具体做什么?对整体状态有什么影响?有什么东西会修改网址吗?是否有任何事情导致组件重新渲染或重新加载,或者props.headers被更新? -
setFields 是一个 useState 钩子,设置字段 var。将其注释掉没有任何效果。没有修改url,stirng直接传给fetch。
-
如果删除它没有任何效果,那么在我看来,问题可能超出了我们正在研究的范围。应用程序的 URL 是否更改?承载此
useEffect的整个组件是否由于组件层次结构的更高层而重新加载?这是否可以单独复制以供我们观察,可能在 CodeSandbox 中,甚至在此处作为 Stack Snippet 进行观察? -
这看起来很奇怪,特别是因为这个确切的代码适用于 ubuntu chrome。它似乎与标题有关,请参见下面的 cmets。上游没有任何东西,这是在单页应用程序开始时显示的登录表单。