我在应用程序中使用React,Typescript和Apollo。我有一个任意的React组件,我想渲染。该组件使用compose
函数来处理来自一系列graphql查询的加载数据。
parent.tsx
<MyComponent />
myComponent.tsx
class MyComponent extends React.Component<MyComponentProps, MyComponentState> {
// code, render, etc
export default compose(
graphql(queryGetSomeData, { name: "GetSomeData" }...
当我不在组件中包含任何道具时,一切都很好,Typescript编译器不会抱怨,并且应用程序呈现。当我尝试包含一个道具(任何类型)时,编译器会以下列方式抱怨:
<MyComponent doSomething={this.doSomeFunction} /> // or foo, or foo={'bar'}
[ts] Property 'doSomething' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<{}, ComponentState>> & Readonly<{ childr...'.
(property) Parent.doSomething: () => aReturnType
当我将withApollo
HOC添加到MyComponent的compose
函数时,错误消失,编译器成功运行。
export default compose(
withApollo,
graphql(queryGetSomeData, { name: "GetSomeData" }...
我已阅读withApollo docs,并且通常了解withApollo提供对Apollo客户端的访问权限。但是,我的其他任何组件都没有这个限制,我很难理解a)为什么这个组件不同并且需要使用Apollo和b)withApollo如何解决这个特殊问题。
非常感谢任何指导。谢谢!