const App: () => ตอบกลับ $ Node = () => {…}: มันหมายถึงอะไรคำแนะนำนี้?


23

บนreact-native init ProjectNameไฟล์แอพหลักApp.jsมีการประกาศของส่วนประกอบด้วยวิธีดังต่อไปนี้

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

คำแนะนำนี้หมายความว่าอย่างไร

ฉันหมายความว่าฉันใช้องค์ประกอบตามที่กำหนดไว้ดังนั้นฉันไม่เข้าใจโดยเฉพาะอย่างยิ่งการแสดงออกในระหว่างconst App = () => {...}: () => React$Node


8
คุณแน่ใจหรือว่าเป็นไฟล์ JS ที่ดูเหมือนตัวพิมพ์ดีด
Phix

4
@Phix ฉันคิดว่ามันใช้ Flow
marco

2
อ่าเข้าใจแล้ว
Phix

คำตอบ:


15

คำจำกัดความประเภทของมันจากโฟลหมายความว่าแอพคงที่เป็นฟังก์ชันประเภทและส่งคืน ReactNode

ReactNode เป็นหนึ่งในประเภทเหล่านี้: ReactChild | ReactFragment | ReactPortal | boolean | null | undefined

ซึ่งหมายความว่าแอปพลิเคชันสามารถส่งคืน JSX ใด ๆ ที่ถูกต้อง (ในการโต้ตอบพื้นเมืองนั้นคืออะไรจากมุมมอง, ข้อความ,. ฯลฯ ), ReactFragment, React.Portal, บูลีน, null, ไม่ได้กำหนด

หากคุณสับสนเกี่ยวกับเครื่องหมายดอลลาร์นี่คือลิงค์ที่มีคำอธิบาย https://www.saltycrane.com/flow-type-cheat-sheet/latest/

มีส่วนแยกต่างหากสำหรับประเภท "ส่วนตัว" หรือ "เวทมนต์" ที่มี $ ในชื่อ ดูบันทึกย่อที่นี่และแสดงความคิดเห็นที่นี่ อัปเดต: ตอนนี้มีการบันทึกบางประเภทไว้ที่นี่แล้ว

เพื่อความง่ายคุณสามารถคิดได้ว่ามันNodeมาจากReact(คิดว่าเป็นขอบเขต / เนมสเปซ)


3
typescript จะเป็นReactNodeโดยไม่ต้อง$
Tomasz Błachut

ฉันเห็นว่าตัวอย่าง React Native ใช้ Flow แต่ฉันไม่พบเอกสารใด ๆ React$Nodeในกระแสเกี่ยวกับ คุณช่วยฉันอธิบายประเด็นนี้ได้ไหม?
marco

ok @marco การไหลที่ไม่ดีของฉันไม่ใช่ตัวพิมพ์ดีด แต่อย่างที่ฉันพูดถึงในคำตอบของฉันโหนดการตอบสนองนั้นเป็นองค์ประกอบใด ๆ ที่คุณสามารถแสดงผลได้
Lukáš Gibo Vaic

ดี แต่ฉันยังคงพลาดอะไรบางอย่างเกี่ยวกับReact$Node(เครื่องหมายดอลลาร์ ... ) ผมหมายถึงในเอกสารการไหลไม่มีการอ้างอิงถึงมัน
marco

@marco แก้ไขคำตอบ ReactNode ไม่ได้มาจาก Flow คำจำกัดความ Flow เฉพาะสำหรับ React เฉพาะประเภท
Lukáš Gibo Vaic

1

React $ Node เป็นประเภทที่กำหนดไว้ใน react.js

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

1

นอกจากนี้ยังเป็นประเภทของการประกาศขององค์ประกอบ 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
    }
});

อย่าลืมลบคำสั่งส่งออกแอปเริ่มต้นในบรรทัดสุดท้าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.