React-native-router-flux: Actions.refresh لا يعمل

تم إنشاؤها على ١٨ أكتوبر ٢٠١٧  ·  24تعليقات  ·  مصدر: aksonov/react-native-router-flux

الإصدار

أخبرنا بالإصدارات التي تستخدمها:

  • رد فعل - جهاز التوجيه الأصلي - تدفق v4.0.0 بيتا
  • رد فعل أصلي v0.46.4

سلوك متوقع

Actions.refresh () تحديث المشهد الحالي.
إذا كان النهج الذي أتبعه خاطئًا ، أو كان لدى Actions.refresh بعض المتطلبات ، فيرجى موافاتي بالمعلومات

السلوك الفعلي

const ConnectRouter = connect()(Router);

const Routes = () => (
  <ConnectRouter>
    <Scene key="root">
      <Scene key="launchScreen" component={LoadingFull} hideNavBar />
      <Scene key="login" component={LoginForm} hideNavBar type={ActionConst.RESET} />
      <Scene key="lostPassword" component={LostPasswordForm} hideNavBar />
      <Scene key="dashboard" component={Dashboard} hideNavBar type={ActionConst.RESET} />
      <Scene key="search" component={SearchResult} hideNavBar />
    </Scene>
  </ConnectRouter>
);

عندما كنت في مشهد البحث (مكون عادي مع الحالة) ، كنت أحاول تحديث المشهد باستخدام Actions.refresh. لكن بطريقة ما لم تنجح على الإطلاق.

خطوات التكاثر

  1. باستخدام قائمة المشاهد المقدمة ، انتقل إلى البحث عن مكون (كان مجرد مكون عادي مع الحالة)
  2. قم بتحديث عن طريق الضغط على زر / تشغيل بعض الأحداث
needs response from author

التعليق الأكثر فائدة

تضمين التغريدة
Actions.refresh ({key: Actions.currentScene}) ؛ لا يعمل مرة ثانية
إنه يعمل إذا كنت تحب هذا :)
Actions.refresh ({key: Math.random ()})

ال 24 كومينتر

+1
أريد استخدام renderBackButton من المشهد. رمز المثال الخاص بي ،

public componentWillMount (): void {
               Actions.refresh({
            renderBackButton: this.renderBackButton.bind(this),
            onRight: this.onRightButtonPress.bind(this)
        });
}

انها لا تعمل. أعتقد أنها نفس المشكلة.

جرب leftButton بدلاً من renderBackButton وقم بتمرير المكون إليه.

@ kesha-antonov إنه لا يعمل. أنا خلقت قضية جديدة لهذا.

إنه يعمل بالنسبة لي. rnrf-4-بيتا 22

leftButton للرمز الأيسر
right للرمز الصحيح

public componentWillMount (): void {
this.props.navigation.setParams ({
onRight: () => {this.myOnRight () ؛} ،
rightTitle: "newTitle"،
}) ؛
}
انها تعمل بالنسبة لي.

يا يسوع ، لقد جئت إلى هنا باحثًا عن إجابة للمسألة الأصلية.
من فضلك ، حاول ألا تستسلم للقضايا غير ذات الصلة!

أواجه نفس المشكلة ولكن عند تحديث المتجر (mobx)

<strong i="7">@observer</strong>
class Custom extends Component {
  render() {

    // prints every time I update state, this's ok!
    console.log('update', store.session.get('logged'))

    return (
      <Router>
        <Scene key="root">
          <Scene key="login"
            component={login}
            type="replace"
            onEnter={() => {
                // ONLY enter here once
                console.log('onEnter');
                return store.session.get('logged')
            }}
            success="recents"
          />
          <Scene key="recents" component={recents} />
        </Scene>
      </Router>
    )
  }
}

حاولت تشغيل استدعاء "إعادة التقديم" Actions.refresh() بعد تحديث المتجر ، لكن onEnter لا يستجيب.

  _onPressButton() {
    store.session.set('logged', !store.session.get('logged')) // invert the value in store
    Actions.refresh() // tested with { key: 'login' } too
  }

issue

aksonov هل يمكنك توجيهنا إلى الاتجاه الصحيح؟ :صلى:

أهلا

لدي نفس المشكلة ... عندما أحاول التحديث باستخدام Actions.refresh () لم يحدث شيء

import React, { Component } from 'react';
import {
    View,
    Text,
    Button,
} from 'react-native';

import { Actions } from 'react-native-router-flux';

export default class Types extends Component {

    constructor(props) {
        super(props);
        console.log("Constructor Types")
    }

    componentWillMount() {
        console.log('Will mount Types')
    }

    componentWillUpdate() {
        console.log("Will Update Types")
    }

    componentWillUnmount() {
        console.log("will Unmont Types")
    }
    render() {
        console.log("render Types")
        return (
            <Button title='refresh' onPress={() => Actions.refresh()}/>
        )
    }
}

نفس المشكلة هنا ، أنا أستخدم redux وعندما أحاول تحديث الزر الأيمن ، لا يتم تحديثه.

يرجى إعادة إنتاج المشكلة مع مشروع المثال.

Actions.refresh({ key: Actions.currentScene }); لا يعمل للمرة الثانية
https://github.com/aksonov/react-native-router-flux/issues/2862
تضمين التغريدة

تضمين التغريدة
Actions.refresh ({key: Actions.currentScene}) ؛ لا يعمل مرة ثانية
إنه يعمل إذا كنت تحب هذا :)
Actions.refresh ({key: Math.random ()})

@ cosinus84 أنت يا سيدي المنقذ.

@ cosinus84 هو حقا العمل. رائع
ولكن هل هناك أي تفسير لماذا يقوم Math.random () بكل الحيل؟

@ cosinus84 يا رجل الروك (ذ)

نأمل ألا تكون هناك حاجة إلى العشوائية لأحدث إصدار الآن

aksonov من فضلك ، هل يمكنك سرد الدعائم (مع وظائفها) التي يمكننا استخدامها في Actions.refresh () حيث لا يبدو أن دعائم المشهد تعمل هنا.

يمكنك التحقق من تطبيق Example ومكالمات التحديث الخاصة به - إنه يعمل بشكل جيد مع الإصدار 4.0.5 الأحدث. لا تتردد في استنساخ وتعديل المثال وفقًا لذلك لتوضيح المشكلة.

نعم ، إنها تعمل بشكل جيد ولكن أقترح عليك عمل قائمة بالدعائم لاستخدامها مع مكالمات التحديث لأننا قد لا نعرف أي منها يجب استخدامه ومتى.
على سبيل المثال لعرض زر الرجوع نحتاج إلى استخدام leftButton prop لكنني لم أكن أعرف ذلك حتى قرأت تعليق @ kesha-antonov

انها تعمل

preetluv عقل تخبرني كيف أصلحته؟

preetluv انظر إجابة cosinus84

يمكنك القيام بما يلي: -

Actions.pop ()
setTimeout (() => Actions.refresh ({"somePropToRefresh": Math.random () ، "yourProp": "لتحديث
الشاشة السابقة عند الرجوع "}) ، 0.5) ؛

يمكنك التحقق من "yourProp" في componentWillReceiveProps في الشاشة السابقة بعد التراجع.

أنا استخدم react-native-router-flux 4.2.0-beta.2 وهو يعمل مع setTimeout

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

fgrs picture fgrs  ·  3تعليقات

GCour picture GCour  ·  3تعليقات

maphongba008 picture maphongba008  ·  3تعليقات

VictorK1902 picture VictorK1902  ·  3تعليقات

wootwoot1234 picture wootwoot1234  ·  3تعليقات