การนำทางที่กำหนดเองพร้อมด้วยองค์ประกอบ Navigator ใน React-Native


158

ฉันสำรวจความเป็นไปได้ของการตอบสนองพื้นเมืองขณะที่การพัฒนาแอพพลิเคสาธิตที่มีระบบนำทางที่กำหนดเองระหว่างมุมมองด้วยความช่วยเหลือขององค์ประกอบNavigator

แอปคลาสหลักแสดงผลเนวิเกเตอร์และภายในrenderSceneส่งคืนคอมโพเนนต์ที่ผ่าน:

class App extends React.Component {
    render() {
        return (
            <Navigator
                initialRoute={{name: 'WelcomeView', component: WelcomeView}}
                configureScene={() => {
                    return Navigator.SceneConfigs.FloatFromRight;
                }}
                renderScene={(route, navigator) => {
                    // count the number of func calls
                    console.log(route, navigator); 

                    if (route.component) {
                        return React.createElement(route.component, { navigator });
                    }
                }}
             />
        );
    }
}

สำหรับแอพตอนนี้มีสองมุมมอง:

class FeedView extends React.Component {
    render() {
        return (
            <View style={styles.container}>
                <Text>
                    Feed View!
                </Text>
            </View>
        );
    }
}

class WelcomeView extends React.Component {
    onPressFeed() {
        this.props.navigator.push({
            name: 'FeedView',
            component: FeedView
        });
    }

    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.welcome}>
                    Welcome View!
                </Text>

                <Text onPress={this.onPressFeed.bind(this)}>
                    Go to feed!
                </Text>
            </View>
        );
    }
}

สิ่งที่ฉันต้องการรู้คือ:

  • ฉันเห็นในบันทึกว่าเมื่อกด "go to feed" renderSceneถูกเรียกหลายครั้งแม้ว่ามุมมองจะแสดงผลถูกต้องหนึ่งครั้ง มันเป็นภาพเคลื่อนไหวได้อย่างไร

    index.ios.js:57 Object {name: 'WelcomeView', component: function}
    index.ios.js:57 Object {name: 'FeedView', component: function}
    // renders Feed View
    
  • โดยทั่วไปแล้ววิธีการของฉันเป็นไปตามวิธีการตอบสนองหรือสามารถทำได้ดีกว่า

สิ่งที่ฉันต้องการบรรลุคือสิ่งที่คล้ายกับNavigatorIOSแต่ไม่มีแถบนำทาง (อย่างไรก็ตามบางมุมมองจะมีแถบการนำทางที่กำหนดเอง)


1
@ericvicenti ตัวอย่างนี้ควรรวมไว้ในหน้าเนวิเกเตอร์ในเอกสาร มันสมบูรณ์มากขึ้นและให้ภาพที่ดีขึ้นเกี่ยวกับวิธีการใช้องค์ประกอบ Navigator ในบริบท
greatwitenorth

เพียงลองตัวอย่างของคุณฉากควรเปลี่ยนโดยอัตโนมัติเมื่อมีการนำทางเกิดขึ้นหรือไม่ สำหรับฉันตัวอย่างของคุณจะไม่แสดงมุมมองฟีด! ข้อความดังนั้นฉันสงสัยว่ามีบางอย่างเปลี่ยนแปลงกับรุ่นล่าสุดหรือไม่
เอียน

คำตอบ:


74

วิธีการของคุณควรทำงานได้ดี ในแอพขนาดใหญ่ที่ Fb เราหลีกเลี่ยงการเรียกrequire()หาส่วนประกอบของฉากจนกว่าเราจะแสดงมันซึ่งสามารถประหยัดเวลาในการเริ่มต้นได้เล็กน้อย

renderSceneฟังก์ชั่นควรจะเรียกว่าเมื่อเกิดเหตุจะถูกผลักแรกที่จะนาวิเกเตอร์ มันจะถูกเรียกใช้สำหรับฉากที่ใช้งานอยู่เมื่อนาวิเกเตอร์ได้รับการแสดงผลอีกครั้ง หากคุณเห็นการrenderSceneถูกเรียกหลายครั้งหลังจาก a pushอาจเป็นข้อผิดพลาด

เนวิเกเตอร์ยังคงทำงานอยู่ แต่ถ้าคุณพบปัญหาใด ๆ กับมันโปรดยื่นบน github และแท็กฉัน! (@ericvicenti)


1
สวัสดี @ Eric โปรดดูได้ที่ลิงค์นี้: - stackoverflow.com/questions/44538306/...
ซิด

2

Navigatorเลิกใช้แล้วในตอนนี้RN 0.44.0คุณสามารถใช้react-native-deprecated-custom-componentsแทนเพื่อสนับสนุนแอปพลิเคชันที่คุณใช้Navigatorอยู่


1

ดังที่คนอื่น ๆ ได้กล่าวไว้ก่อนหน้านี้ Navigator เลิกใช้แล้วตั้งแต่ v0.44 แต่ยังสามารถนำเข้าเพื่อรองรับแอปพลิเคชันรุ่นเก่า:

นาวิเกเตอร์ถูกลบออกจากแพ็คเกจ React Native หลักในเวอร์ชัน 0.44 โมดูลถูกย้ายไปยังแพคเกจแบบ ตอบรับดั้งเดิมที่กำหนดเองซึ่งสามารถนำเข้าโดยแอปพลิเคชันของคุณเพื่อรักษาความเข้ากันได้ย้อนหลัง

หากต้องการดูเอกสารต้นฉบับสำหรับนาวิเกเตอร์โปรดเปลี่ยนเป็นเอกสารเวอร์ชันเก่ากว่า

ตามเอกสาร (React v0.54 พื้นเมือง) การนำระหว่างหน้าจอ ขอแนะนำให้ใช้React Navigationหากคุณเพิ่งเริ่มต้นใช้งานหรือNavigatorIOSสำหรับแอปพลิเคชันที่ไม่ใช่ Android

หากคุณเพิ่งเริ่มต้นใช้งานการนำทางคุณอาจต้องใช้การนำทางซ้ำ React Navigation นำเสนอโซลูชันการนำทางที่ใช้งานง่ายด้วยความสามารถในการนำเสนอการนำทางแบบสแต็กทั่วไปและรูปแบบการนำทางแบบแท็บบนทั้ง iOS และ Android

...

หากคุณกำหนดเป้าหมายไปที่ iOS เท่านั้นคุณอาจต้องการตรวจสอบNavigatorIOS เพื่อให้รูปลักษณ์และความรู้สึกดั้งเดิมโดยใช้การกำหนดค่าขั้นต่ำเนื่องจากมีการห่อหุ้มรอบคลาส UINavigationController

หมายเหตุ : ในขณะที่ให้คำตอบนี้ React Native อยู่ในเวอร์ชัน 0.54


0

คอมโพเนนต์เนวิเกเตอร์เลิกใช้แล้วในขณะนี้ คุณสามารถใช้ react-native-router-flux โดย askonov มันมีความหลากหลายมากและรองรับภาพเคลื่อนไหวที่แตกต่างกันมากมายและมีประสิทธิภาพ

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