Điều hướng tùy chỉnh với thành phần Điều hướng trong React-Native


158

Tôi đang khám phá các khả năng của React Native trong khi phát triển ứng dụng demo với điều hướng tùy chỉnh giữa các chế độ xem với sự trợ giúp của Navigatorthành phần .

Lớp ứng dụng chính biểu hiện điều hướng và bên trong renderScenetrả về thành phần được thông qua:

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 });
                    }
                }}
             />
        );
    }
}

Hiện tại ứng dụng chứa hai chế độ xem:

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>
        );
    }
}

Những gì tôi muốn tìm ra là:

  • Tôi thấy trong các bản ghi rằng khi nhấn vào thì hãy chuyển sang feed feed renderSceneđược gọi nhiều lần mặc dù khung nhìn hiển thị chính xác một lần. Có phải đó là cách hoạt hình?

    index.ios.js:57 Object {name: 'WelcomeView', component: function}
    index.ios.js:57 Object {name: 'FeedView', component: function}
    // renders Feed View
    
  • Nói chung cách tiếp cận của tôi phù hợp với cách React, hoặc nó có thể được thực hiện tốt hơn?

Những gì tôi muốn đạt được là một cái gì đó tương tự NavigatorIOSnhưng không có thanh điều hướng (tuy nhiên một số chế độ xem sẽ có thanh điều hướng tùy chỉnh riêng).


1
@ericvicenti ví dụ này nên được đưa vào trang Điều hướng trong tài liệu. Nó hoàn thiện hơn và cung cấp một bức tranh tốt hơn về cách sử dụng thành phần Navigator trong ngữ cảnh.
greatwitenorth

Chỉ cần thử ví dụ của bạn, cảnh có tự động thay đổi khi điều hướng đẩy xảy ra không? Đối với tôi, ví dụ của bạn không bao giờ hiển thị Chế độ xem nguồn cấp dữ liệu! văn bản, vì vậy tôi tự hỏi nếu một cái gì đó đã thay đổi với các phiên bản gần đây.
Ian

Câu trả lời:


74

Cách tiếp cận của bạn nên làm việc tuyệt vời. Trong các ứng dụng lớn tại Fb, chúng tôi tránh gọi require()thành phần cảnh cho đến khi chúng tôi kết xuất nó, điều này có thể tiết kiệm một chút thời gian khởi động.

Các renderScenechức năng nên được gọi khi cảnh đầu tiên được đẩy lên Navigator. Nó cũng sẽ được gọi cho cảnh hoạt động khi Bộ điều hướng được kết xuất lại. Nếu bạn thấy renderSceneđược gọi nhiều lần sau a push, thì đó có thể là một lỗi.

Trình điều hướng vẫn đang trong quá trình hoàn thiện, nhưng nếu bạn gặp bất kỳ vấn đề nào với nó, vui lòng gửi trên github và gắn thẻ cho tôi! (@ericvicenti)


1
Xin chào @Eric vui lòng xem trên liên kết này: - stackoverflow.com/questions/44538306/ trên
sid

2

Navigatorbây giờ không được dùng nữa để RN 0.44.0bạn có thể sử dụng react-native-deprecated-custom-componentsđể hỗ trợ cho ứng dụng hiện tại đang sử dụng Navigator.


1

Như những người khác đã đề cập trước đây, Navigator đã bị từ chối kể từ v0.44, nhưng vẫn có thể được nhập để hỗ trợ các ứng dụng cũ hơn:

Bộ điều hướng đã bị xóa khỏi gói React Native lõi trong phiên bản 0.44. Mô-đun đã được chuyển sang gói thành phần tùy chỉnh phản ứng có thể được nhập bởi ứng dụng của bạn để duy trì khả năng tương thích ngược.

Để xem tài liệu gốc cho Bộ điều hướng, vui lòng chuyển sang phiên bản cũ hơn của tài liệu.

Theo tài liệu (React Native v0.54) Điều hướng giữa các màn hình . Hiện tại, bạn nên sử dụng React Navigation nếu bạn mới bắt đầu hoặc NavigatorIOS cho các ứng dụng không dành cho Android

Nếu bạn chỉ mới bắt đầu với điều hướng, có lẽ bạn sẽ muốn sử dụng React Navigation . React Navigation cung cấp một giải pháp điều hướng dễ sử dụng, với khả năng trình bày điều hướng ngăn xếp phổ biến và các mẫu điều hướng theo thẻ trên cả iOS và Android.

...

Nếu bạn chỉ nhắm mục tiêu iOS, bạn cũng có thể muốn xem NavigatorIOS như một cách cung cấp giao diện gốc với cấu hình tối thiểu, vì nó cung cấp trình bao bọc xung quanh lớp UINavestionControll gốc.

Lưu ý : Tại thời điểm cung cấp câu trả lời này, React Native đã có phiên bản 0.54


0

Thành phần điều hướng bị phản đối ngay bây giờ. Bạn có thể sử dụng phản ứng-bộ định tuyến-bộ định tuyến bằng Askonov, nó có rất nhiều loại và hỗ trợ nhiều hình ảnh động khác nhau và hiệu quả

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.