on react-native init ProjectName
では、メインアプリファイルApp.js
に次のようにコンポーネントの宣言が含まれています。
const App: () => React$Node = () => {...}
この指示はどういう意味ですか?
const App = () => {...}
つまり、として定義されたコンポーネントに慣れているので、特に間の表現がわかりません: () => React$Node
。
on react-native init ProjectName
では、メインアプリファイルApp.js
に次のようにコンポーネントの宣言が含まれています。
const App: () => React$Node = () => {...}
この指示はどういう意味ですか?
const App = () => {...}
つまり、として定義されたコンポーネントに慣れているので、特に間の表現がわかりません: () => React$Node
。
回答:
Flowからの型定義です。つまり、定数Appは関数型であり、ReactNodeを返します。
ReactNodeは次のタイプのいずれかです。 ReactChild | ReactFragment | ReactPortal | boolean | null | undefined
つまり、関数Appは、有効なJSX(ビュー、テキストなどからネイティブに反応する)、ReactFragment、React.Portal、ブール値、null、未定義を返すことができます。
ドル記号について混乱している場合は、ここに説明付きのリンクがあります。 https://www.saltycrane.com/flow-type-cheat-sheet/latest/
名前に$が含まれる「プライベート」または「マジック」タイプには、個別のセクションがあります。ここのメモを参照し、ここにコメントしてください。更新:これらのタイプのいくつかは、ここで文書化されています。
簡単のために、あなたはそのように考えることができますNode
からReact
(スコープ/名前空間としてそれを考えます)
ReactNode
なし、$
React$Node
。この点を明確にするのを手伝ってくれませんか?
React$Node
(ドル記号など)についてはまだ見逃しています。つまり、フロードキュメントでは、それについての言及はありません
これは、関数としての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を削除することを忘れないでください。