const App:()=> React $ Node =()=> {...}:这条指令是什么意思?

时间:2019-10-07 20:08:35

标签: javascript reactjs react-native

react-native init ProjectName上,主应用文件App.js通过以下方式包含组件的声明:

const App: () => React$Node = () => {...}

该指令是什么意思?

我的意思是,我习惯于将组件定义为const App = () => {...},所以我尤其不理解: () => React$Node之间的表达式。

3 个答案:

答案 0 :(得分:6)

它来自Flow的类型定义,这意味着常量App是函数类型,并且它返回ReactNode。

ReactNode是以下类型之一:snprintf(dest, 5, "%s", temporary)

这意味着功能App可以返回任何有效的JSX(以本机方式从View,Text,.etc中返回),ReactFragment,React.Portal,布尔值,null,未定义

如果您对美元符号感到困惑,请点击此处,获得解释链接。 https://www.saltycrane.com/flow-type-cheat-sheet/latest/

名称分别为$的“专用”或“魔术”类型有单独的部分。请参阅此处的注释,并在此处进行评论。更新:这些类型现在已在此处记录。

为简便起见,您可以将其视为ReactChild | ReactFragment | ReactPortal | boolean | null | undefined中的Node(将其视为作用域/命名空间)

答案 1 :(得分:4)

它也是App组件作为函数的一种声明,但是您可以将其更改为

import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View } from 'react-native';

export default class App extends Component {
    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.instructions}>Hello World!</Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF'
    },
    instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5
    }
});

别忘了在最后一行删除语句Export default App。

答案 2 :(得分:0)

React $ Node是react.js中定义的类型

declare type React$Node =
  | null
  | boolean
  | number
  | string
  | React$Element<any>
  | React$Portal
  | Iterable<?React$Node>;