【发布时间】:2021-08-05 11:17:27
【问题描述】:
我有这个功能组件:
export const Special = (props) => {
const [data, setData] = useState();
const [loading, setLoading] = useState(true);
const dataRead = (dt) => {
setData(dt);
setLoading(false);
}
useEffect(() => {
setLoading(true);
fetch("/reportTypes/search/visible")
.then( (response) => response.json() )
.then( dataRead)
.catch( (err) => {
setLoading(false);
});
}, []);
if ( loading ) return (<Loading />);
return (
<div className="Special">
<Labeled label="Pricing">
{JSON.stringify(data)}
</Labeled>
</div>
);
}
如果我从 dataRead 方法中删除 setData(dt) 或 setLoading(false) 之一,它会起作用。但是,如果两者都存在,则会出现错误:
未捕获的错误:元素类型无效:应为字符串(对于 内置组件)或类/函数(用于复合组件) 但得到:未定义。您可能忘记从 它定义的文件,或者您可能混淆了默认值和命名 进口。
我尝试在没有 useEffect 的情况下调用它 - 结果相同。我用上面的方括号尝试了 useEffect ,没有。我尝试了各种配置。无论如何,但同时调用 setData 和 setLoading 会导致此错误。删除其中一个就可以了。我刚反应过来,所以一定有什么我错过了。
【问题讨论】:
-
向我们展示您的包含
<Loading />组件的文件。 -
你能显示
useState的导入吗? -
在提问时,重要的是要弄清楚是哪一行实际导致了错误。根据您的问题描述,这可能发生在三个地方:
<Loading>未定义,<Labeled>未定义,或者您尝试在data仍未定义时渲染它,但需要注意的是,错误可能发生在 多个地方取决于当前的代码和条件。
标签: javascript reactjs react-hooks