gpt4 book ai didi

javascript - 在 React Native 的其他 .tsx 组件中使用 .tsx 组件

转载 作者:行者123 更新时间:2023-11-30 14:02:13 27 4
gpt4 key购买 nike

我正在自学在 React Native 中使用 TypeScript 构建应用程序。作为一名 Swift 开发人员,JS 和 TS 需要一点点习惯。

我注意到的一件事是,似乎不可能在 Render 方法中使用我在另一个 tsx 文件中的 tsx 文件中编写的组件。

//SomeComponent.tsx

export default class SomeComponent extends Component {
//all my logic
}

//OtherComponent.tsx
export default class ScoreTable extends Component {
//logic
render() {

<SomeComponent style={{flex: 1}}></SomeComponent>
}
}

这会给我以下错误:

Type '{ style: { flex: number; }; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<SomeComponent> & Readonly<{}> & Readonly<{ children?: ReactNode; }>'.

我可以通过简单地将我的 tsx SomeComponent 转换为 .js 组件来解决这个问题,但我真的很喜欢 tsx 语法。 所以我的问题是 为什么我不能在其他 tsx 组件中使用 .tsx 组件?或者还有其他方法吗?

最佳答案

我同意这个错误令人困惑。

有什么问题?

本质上,这是因为没有为 Props 指定类型的 SomeComponent正确地,导致 TypeScript 假定最低限度的类型定义,其中不包括 style属性(property)。

我该如何解决?

为你希望被 SomeComponent 接受的 Prop 添加一个接口(interface),就像你以前使用 PropTypes 所做的一样。 .

//SomeComponent.tsx

interface SomeComponentProps {
style: React.CSSProperties;
}

export default class SomeComponent extends Component<SomeComponentProps> {
//all my logic
}

你是怎么想出来的?

有一些线索。第一个是 Type '{ style: { flex: number; }; }'部分,它看起来非常像您在使用 SomeComponent 时指定的属性(又名 Prop )在OtherComponent.tsx .所以它可能与 SomeComponent 的 Prop 有关.

错误的下一部分说 is not assignable to type ,确认 TypeScript 认为 Prop 的类型与它所知道的 SomeComponent 不匹配.

错误的最后部分是最令人困惑的,它列出了类型 'IntrinsicAttributes & IntrinsicClassAttributes<SomeComponent> & Readonly<{}> & Readonly<{ children?: ReactNode; }>' .搜索 IntrinsicAttributes在我的 React 代码中让我看到它确实与组件期望的属性的基本类型有关(我在 node_modules/@types/react/index.d.ts 中找到它,react 的类型定义)。

将所有这些线索与关于如何使用两个可选的通用类型参数在 TypeScript 中强类型化自定义 React 组件的 props 和状态的先验知识相结合 React.Component引导我找到最终解决方案。

希望您现在感觉更有能力在未来破译类似的令人困惑的错误消息。

关于javascript - 在 React Native 的其他 .tsx 组件中使用 .tsx 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138668/

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