javascript navigation - React-Native-تنقل مخصص مع مكون Navigator




v2 (5)

أستكشف إمكانيات React Native أثناء تطوير تطبيق توضيحي باستخدام التنقل المخصص بين طرق العرض بمساعدة مكون Navigator - http://facebook.github.io/react-native/docs/navigator.html#content

فئة التطبيق الرئيسية يجعل المستكشف وداخل 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 });
                    }
                }}
             />
        );
    }
}

يحتوي التطبيق الآن على 2 مشاهدات:

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 عدة مرات على الرغم من أن العرض يتم renderScene بشكل صحيح مرة واحدة. هل هو كيف يعمل الرسوم المتحركة؟

    index.ios.js:57 Object {name: 'WelcomeView', component: function}
    index.ios.js:57 Object {name: 'FeedView', component: function}
    // renders Feed View
    
  • هل يتوافق طريقي عموما مع طريقة رد الفعل ، أم أنه يمكن القيام به بشكل أفضل؟

ما أريد تحقيقه هو شيء مشابه لـ NavigatorIOS ولكن بدون شريط تنقل (على الرغم من أن بعض العروض ستحتوي على شريط تنقل مخصص خاص بها).


Answers

تم إيقاف مكون Navigator الآن. يمكنك استخدام رد الفعل الأصلي ، الموجه تدفق بواسطة askonov ، لديها مجموعة ضخمة ويدعم العديد من الرسوم المتحركة المختلفة وكفاءة


يجب أن تعمل مقاربتك بشكل رائع. في التطبيقات الكبيرة في Fb ، نتجنب استدعاء require() لمكون المشهد حتى نعرضه ، مما يوفر بعض الوقت لبدء التشغيل.

يجب renderScene وظيفة renderScene عند دفع المشهد لأول مرة إلى المستكشف. سيتم أيضًا استدعاء المشهد النشط عند إعادة عرض Navigator. إذا رأيت renderScene عدة مرات بعد push ، فمن المحتمل أن يكون خطأ.

لا يزال الملاح قيد التقدم ، ولكن إذا وجدت أي مشاكل معه ، يرجى تسجيله على github ووسم لي! (ericvicenti)


تم إيقاف Navigator الآن في RN 0.44.0 يمكنك استخدام react-native-deprecated-custom-components بدلاً من ذلك لدعم تطبيقك الحالي الذي يستخدم Navigator .


كما ذكر آخرون سابقًا ، تم إيقاف Navigator منذ الإصدار 0.40 ، ولكن لا يزال من الممكن استيراده لدعم التطبيقات الأقدم:

تمت إزالة Navigator من حزمة React Native الأساسية في الإصدار 0.44. تم نقل الوحدة إلى حزمة react-native-custom-components يمكن استيرادها بواسطة التطبيق الخاص بك من أجل الحفاظ على التوافق مع الإصدارات السابقة.

لرؤية المستندات الأصلية لـ Navigator ، يرجى التبديل إلى نسخة قديمة من المستندات.

حسب المستندات (React Native v0.54) التنقل بين الشاشات . من المستحسن الآن استخدام ميزة REct Navigation إذا كنت قد بدأت للتو ، أو NavigatorIOS للتطبيقات التي لا تعمل بنظام Android

إذا كنت قد بدأت للتو في التنقل ، فربما تريد استخدام ميزة " التنقل المُتفاعل" . يوفر نظام التصفح React حلًا سهل الاستخدام للملاحة ، مع القدرة على عرض أنماط التنقل الشائعة ونماذج التنقل المبوبة على كل من نظامي التشغيل iOS و Android.

...

إذا كنت تستهدف نظام التشغيل iOS فقط ، فقد ترغب أيضًا في التحقق من NavigatorIOS كطريقة لتوفير مظهر وأسلوب أصلي مع الحد الأدنى من التهيئة ، حيث توفر غلافًا حول فئة UINavigationController الأصلية.

ملاحظة : في وقت تقديم هذه الإجابة ، كان React Native في الإصدار 0.54


ما زلت لا أرى كيف أن هذا في الواقع يحل المسألة في متناول اليد.

إذا كان لدي 4 مهام مع تبعيات محددة فيما بينها

ا ب ت ث

حيث تعتمد A على B ، إلخ كما تم تعريفها بواسطة gulp.task('A',['B'],function A(){}); ثم قمت بتعريف مهمة جديدة باستخدام gulp.watch يعمل فقط الوظائف من شأنه أن يكرر التبعيات.

على سبيل المثال نظرا لهذه المهام (كل وظيفة المهام تتعرض عن طريق الاسم):

function A(){}
gulp.task('A',['B'],A);

function A(){}
gulp.task('A',['B'],A);

function B(){}
gulp.task('B',['C'],B);

function C(){}
gulp.task('C',['D'],C);

function D(){}
gulp.task('D',[],D);

أستطيع أن أكتب 1)

gulp.task('WATCHER', ['A'], function(){
   ...
}

التي ستنفذ A-> D ولكن إذا فشلت مثلاً الخطوة الثانية ، فلن تدخل المهمة أبداً (فكر في الترجمة أو الخطأ التجريبي)

أو أستطيع أن أكتب 2)

gulp.task('WATCHER', [], function(){
   gulp.watch(...,['A'])
}

التي لن تعمل A-> D حتى يتم تغيير شيء أولاً.

أو أستطيع أن أكتب 3)

gulp.task('WATCHER', [], function(){
   D();
   C();
   B();
   A();
   gulp.watch(...,['A'])
}

مما يؤدي إلى تكرار (والأخطاء مع مرور الوقت) من التسلسل الهرمي التبعية.

ملاحظة: في حالة شخص ما يتساءل لماذا أريد أن يتم تنفيذ مهمة المراقبة الخاصة بي في حالة فشل أي من المهام التابعة التي عادة ما يكون السبب في أنني استخدم المراقبة للتطوير المباشر. على سبيل المثال. أبدأ مهمة المراقبة الخاصة بي للبدء في العمل على الاختبارات وما إلى ذلك ، ويمكن أن يكون الرمز الأولي الذي أبدأ به بالفعل مشاكل في الأخطاء وبالتالي.

لذلك آمل أن الجول أو بعض إقامة ما يعادل لبعض الوقت





javascript ios navigation reactjs react-native