尝试将函数从上下文提供程序传递给组件时,出现Property 'toggleAuthError' does not exist on type 'IntrinsicAttributes & InterfaceProps'.ts(2322)
的Typescript错误。
上下文提供者是
interface InterfaceProps {
children?: any;
}
interface InterfaceState {
error: any;
toggleAuthError: any;
}
const GlobalContext = createContext({
error: null,
toggleAuthError: () => {}
});
export class GlobalProvider extends React.Component<InterfaceProps, InterfaceState> {
public toggleAuthError = ({ authError }: any) => {
this.setState({ error: authError });
};
public state = {
error: null,
toggleAuthError: this.toggleAuthError
};
public render() {
console.log(this.state);
const { children } = this.props;
return <GlobalContext.Provider value={this.state as any}>{children}</GlobalContext.Provider>;
}
}
export const GlobalConsumer = GlobalContext.Consumer;
我正在访问值的组件是
const SignInPageBase = () => (
<GlobalProvider>
{({ toggleAuthError }: any) => (
<Form toggleAuthError={toggleAuthError} />
)}
</GlobalProvider>
);
该错误显示在import
组件Form
上。
是什么原因导致此错误,我该如何解决?我有很多相似的组件,而没有这个问题。
答案 0 :(得分:1)
您似乎错过了GlobalConsumer
来使用上下文(请参阅here)。
const SignInPageBase = () => (
<GlobalProvider>
<GlobalConsumer>
{({ toggleAuthError }: any) => (
<Form toggleAuthError={toggleAuthError} />
)}
</GlobalConsumer>
</GlobalProvider>
);
答案 1 :(得分:0)
Form
是标准HTML标记(与react组件相反)。
之所以出现此错误,是因为toggleAuthError
不是Form
标记的标准属性。
一个好的解决方案是坚持标准,仅对您的react组件使用自定义props
,在这种情况下,可能是用您自己的组件包装Form
并使用{{ 1}}属性。
有时是不可能或根本无法维护的(例如,当您使用需要直接在元素上使用此类属性的外部库时),因此另一种选择是扩展类型定义以包括您喜欢的添加项。
为此,创建一个类型定义文件(例如toggleAuthError
),然后您可以像平常使用typescript一样添加所需的定义:
my-app.d.ts