gpt4 book ai didi

javascript - 使用 TypeScript 和 Redux 响应惰性

转载 作者:行者123 更新时间:2023-12-03 17:25:35 26 4
gpt4 key购买 nike

我在将 React lazy 与使用 TypeScript 和 Redux 的项目结合时遇到了问题。这是我的代码:

// lazy-area.tsx
const LazyArea = ({text}: Props): JSX.Element => {
....
};

export const LazyArea = connect(
mapStateToProps,
mapDispatchToProps
)(LazyArea);


//Menu.tsx
import React, { lazy, Suspense } from 'react';
....
const lazyArea = lazy(() => import('./lazy-area'));

const Menu = ({
.....
}: Props): JSX.Element | null => {
return (
<Suspense fallback={LoadingView}>
<LazyArea />
</Suspense>
)
export const Menu = connect(
mapStateToProps,
mapDispatchToProps
)(Menu);
});

通过此设置,我收到一条错误消息:
Type 'Promise<typeof import("/home/user/app/lazy-area")>' is not assignable to type 'Promise<{ default: ComponentType<any>; }>'.
Property 'default' is missing in type 'typeof import("/home/user/app/src/lazy-area")' but required in type '{ default: ComponentType<any>; }'.

我尝试过以下解决方案:
TypeScript with React Lazy getting promise error
添加 export as ComponentType<any>export as React.FC到 LazyArea 导出,但错误保持不变。

中提出的解决方案
here
删除错误,但根据 this该解决方案不是最佳实践,并且“可能会终止优化并可能导致无限循环”。

在 LazyArea 中使用导出默认值时,此错误也会消失:
const LazyArea = connect(
mapStateToProps,
mapDispatchToProps
)(LazyArea);

export default LazyArea;

但是,我从一些来源读到应该避免使用导出默认值。

有什么好的解决方案可以解决这个问题吗?如果我提供的关于某事的信息太少,请告知。谢谢 :)

最佳答案

我不知道你为什么认为应该避免使用默认导出:) 我认为这只是一些团队的惯例。所以添加 export default LazyArea;是处理这个问题的有效方法。无论如何,您不会有太多的惰性模块。
这就是 React docs 的解决方案的原因也可以在您将默认导出放入其自己的文件中的情况下工作。
另一种推荐的方法是更改​​导入代码以将其转换为默认内联:

const LazyArea = React.lazy(() =>
import("./lazy-area").then((module) => ({
default: module.LazyArea,
}))
);
但这对我来说似乎工作太多了 :) 所以我创建了 react-lazily可以满足您的期望。
例子
const { LazyArea } = lazily(() => import('./lazy-area'));
它只是 React.lazy 的一个小包装,但它允许您拥有一个非常直接的代码,如下所示:
import { lazily } from 'react-lazily';
const { Component1, Component2 } = lazily(() => import('./Components'))

关于javascript - 使用 TypeScript 和 Redux 响应惰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61369571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com