【发布时间】:2021-09-06 22:21:48
【问题描述】:
我今天正在编写一个 React+react-query 应用程序,当我从开发模式切换到生产模式时遇到了问题。
生产模式混合了运行npm run build 和在服务中提供这些HTML/JavaScript/CSS 文件(可能使用npx serve dist)。开发模式只是运行npm run dev(或npm start,如果使用CRA)。
这是代码:
const useMyQuery = () =>
useQuery(
["myAwesomeData"],
async () => {
const { data } = await axios.get(`http://http.us/500`);
return data;
},
{ placeholderData: { myAwesomeProperty: [] } }
);
const App = () => {
const { isError } = useMyQuery();
return isError ? <div>Error</div> : <Child />;
};
const Child = () => {
const { data } = useMyQuery();
return (
<pre>
<code>{JSON.stringify(data.myAwesomeProperty)}</code>
</pre>
);
};
为了简单起见,我省略了QueryClientProvider 及其client。 placeholderData 也被用作加载状态,它允许在加载真实数据时正确呈现 Child。
这里最重要的部分是 data.myAwesomeProperty 在加载状态之后 - 只有在生产中运行时才会引发错误。产生的错误是:
TypeError: Cannot read property 'myAwesomeProperty' of undefined
在开发中运行时,<div>Error</div> 会按预期显示。
我主要关心的不是解决问题(因为我可以简单地在Child 组件上添加一个if 语句来防止访问data.myAwesomeProperty)。
相反,我想知道为什么开发行为和生产行为之间存在差异?它是否记录在某处?
【问题讨论】:
-
你引用所有这些文本有什么原因吗?看起来这只是您自己的文本,只是...使用常规文本? (并为该 TypeError 使用代码围栏或代码缩进)
标签: reactjs react-query