我尝试使用一个自行开发的包中的钩子,这个包在create-react-app应用程序中使用useQuery。
这是我的场景:我正在开发两个npm项目:"Core"和"Demo"。Core包含我希望在其他应用程序中使用的函数、挂接和组件(如Demo,它是一个CRA)。一些钩子包含useQuery不幸的是,当在其他应用程序(如Demo)中使用这个钩子时,我总是得到错误消息**"No QueryClient set,使用QueryClientProvider来设置一个",即使我设置了QueryClientProvider。
是否必须在Core中设置任何配置才能使所需行为工作(例如,将使用的钩子放置在应用程序上下文中)?是否必须将包构建为特定模块?或者是否可以将应用程序的QueryClient传递给Core**的自定义钩子?
下面的代码展示了我的尝试:
- 核心/挂钩/使用挂钩与使用查询. js *
export function useHookWithUseQuery() {
const queryClient = useQueryClient();
const { data } = useQuery(
"QUERY_KEY",
getDataFn
);
const invalidateData = () => {
queryClient.invalidateQueries("QUERY_KEY");
};
return { data, invalidateData };
}
- 演示/索引. js:*
ReactDOM.render(
<React.StrictMode>
<QueryClientProvider client={queryClient} contextSharing={false}>
<App />
</QueryClientProvider>
</React.StrictMode>,
document.getElementById("root")
);
- 演示/应用程序. js *
import { useHookWithUseQuery } from "core/dist/hooks"; // also tried core/src/hooks
...
function App() {
const { data } = useHookWithUseQuery();
const { someFetchedText } = data;
return (
<div>{ someFetchedText }</div>
);
}
下面介绍如何将Core安装到Demo中
- 核心版(构建+在Verdaccio本地发布)
- rm-rf dist && NODE_ENV =生产数据包源--输出目录dist--复制文件
- npm发布--注册表http://localhost:4873/
- 在演示中
- NPM配置注册表= http://本地主机:4873 npm i核心
2条答案
按热度按时间2lpgd9681#
如果还有人感兴趣的话,我也遇到了上面描述的同样的问题。
我的问题是我从本地文件夹安装了我的“核心”包,结果react-query没有正确地删除重复数据。
直接从git(或npm注册表)安装它允许npm正确地删除重复数据,并为我修复了这个问题。
omvjsjqw2#
我遇到了同样的问题,在Yarn锁或NPM包锁中删除重复的React查询依赖项是解决方案:
为了Yarn。你可以跑锁
或用于 Package 锁.json:
这会解决你的问题就像解决我的一样。