我正在尝试正确输入映射子组件的道具:
type Props = {
children: any
}
const MyComponent: FunctionComponent<Props> = () => (React.Children.map(children, someMapingFunction);
Run Code Online (Sandbox Code Playgroud)
我一直在用JSX.Element,但感觉不太对劲。
我注意到React可以这样导入:
import * as React from 'react';
Run Code Online (Sandbox Code Playgroud)
...或像这样:
import React from 'react';
Run Code Online (Sandbox Code Playgroud)
第一个导入模块中的所有内容react(请参阅:导入整个模块的内容)
似乎这两种方法是不同的,并且根本上是不兼容的。
为什么它们都起作用?
请参考源代码并解释该机制...我有兴趣了解其工作原理。
更新资料
这与import *作为'react'的反应与import'react'的反应之间的区别不是重复的
ES6常规模块信息回答了该问题。
我在问使react模块像这样工作的机制。在这里,它似乎与源代码中的 “ hacky”导出机制有关,但尚不清楚如何将整个模块导入到默认的导出中React,以及如何将这两种方法都可以与转译JSX等一起使用。
export const PageViewTracker = ({ children }: ReactNode): ReactElement => {
usePageView();
return children;
};
Run Code Online (Sandbox Code Playgroud)
问题:
此函数返回错误» “ReactNode”类型上不存在属性“children” «
我的解决方法:
我尝试了几种类型,但只有任何不是我想要的作品。通常我将 ReactNode 用于儿童道具,效果很好。在这种情况下,TypeScript 似乎有问题。
reactjs ×3
typescript ×3
children ×1
ecmascript-6 ×1
javascript ×1
react-native ×1
react-props ×1