React-native-router-flux: Actions.refresh funktioniert nicht

Erstellt am 18. Okt. 2017  ·  24Kommentare  ·  Quelle: aksonov/react-native-router-flux

Ausführung

Teilen Sie uns mit, welche Versionen Sie verwenden:

  • reagieren-native-router-flux v4.0.0-beta.12
  • reagieren-nativ v0.46.4

Erwartetes Verhalten

Actions.refresh() aktualisiert die aktuelle Szene.
Wenn mein Ansatz falsch war oder Actions.refresh eine Anforderung hat, geben Sie mir bitte die Informationen

Tatsächliches Verhalten

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

Als ich bei der Suchszene war (einfache Komponente mit Status), habe ich versucht, die Szene mit Actions.refresh zu aktualisieren. Aber irgendwie ging das gar nicht.

Schritte zum Reproduzieren

  1. Verwenden Sie die bereitgestellte Szenenliste, um nach Komponenten zu suchen (es war nur eine einfache Komponente mit Status).
  2. trigger actions.refresh durch Drücken der Taste / Auslösen eines Ereignisses
needs response from author

Hilfreichster Kommentar

@jaysassyinfotech
Actions.refresh({ key: Actions.currentScene }); funktioniert beim zweiten mal nicht
Es funktioniert, wenn du das machst :)
Actions.refresh({Schlüssel: Math.random()})

Alle 24 Kommentare

+1
Ich möchte renderBackButton aus der Szene verwenden. Mein Beispielcode,

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

Es funktioniert nicht. Ich denke, es ist das gleiche Problem.

Probieren Sie leftButton anstelle von renderBackButton aus und übergeben Sie ihm Component.

@kesha-antonov Es funktioniert nicht. Ich erstelle dafür ein neues Thema.

Für mich geht das. rnrf-4-beta22

leftButton für linkes Symbol
right für das rechte Symbol

öffentliche KomponenteWillMount (): void {
this.props.navigation.setParams({
onRight: () => {this.myOnRight();},
rightTitle:'neuerTitel',
});
}
Es funktioniert für mich.

Jesus, ich bin hierher gekommen, um nach einer Antwort auf das ursprüngliche Problem zu suchen.
Bitte versuchen Sie nicht, bei nicht verwandten Themen Huckepack zu nehmen!

Ich habe das gleiche Problem, ABER beim Aktualisieren des Stores (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>
    )
  }
}

Ich habe versucht, das 'Re-Rendering' mit Actions.refresh() nach der Aktualisierung des Stores auszulösen, aber onEnter reagiert nicht.

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

issue

@aksonov Könnten Sie uns bitte in die richtige Richtung weisen? :beten:

Hallo

Ich habe das gleiche Problem ... Wenn ich versuche, mit Actions.refresh() zu aktualisieren, passiert nichts

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

Das gleiche Problem hier, ich verwende Redux und wenn ich versuche, die rechte Schaltfläche zu aktualisieren, wird sie einfach nicht aktualisiert.

Bitte reproduzieren Sie das Problem mit Beispielprojekt.

Actions.refresh({ key: Actions.currentScene }); funktioniert beim zweiten Mal nicht
https://github.com/aksonov/react-native-router-flux/issues/2862
@Aksonov

@jaysassyinfotech
Actions.refresh({ key: Actions.currentScene }); funktioniert beim zweiten mal nicht
Es funktioniert, wenn du das machst :)
Actions.refresh({Schlüssel: Math.random()})

@cosinus84 Sie, mein Herr, sind ein Lebensretter.

@cosinus84 Es ist wirklich Arbeit. Beeindruckend
Aber gibt es eine Erklärung, warum Math.random() alle Tricks macht?

@cosinus84 du Rocker (y)

Hoffentlich wird für die neueste Version jetzt kein Zufall benötigt

@aksonov Können Sie bitte die Requisiten (mit ihren Funktionen) auflisten, die wir in Actions.refresh() verwenden können, da die Scene-Requisiten hier nicht zu funktionieren scheinen.

Sie können die Beispiel-App und ihre Aktualisierungsaufrufe überprüfen - sie funktioniert dort mit der neuesten Version 4.0.5 einwandfrei. Fühlen Sie sich frei, das Beispiel zu klonen und entsprechend zu ändern, um das Problem zu demonstrieren.

Ja, es funktioniert gut, aber ich schlage vor, dass Sie eine Liste von Requisiten erstellen, die mit Aktualisierungsaufrufen verwendet werden sollen, da wir möglicherweise nicht wissen, welche wann verwendet werden sollen.
Um beispielsweise den Zurück-Button zu rendern, müssen wir leftButton prop verwenden, aber das wusste ich nicht, bis ich den Kommentar von @kesha-antonov gelesen habe

es funktioniert

@preetluv magst du mir sagen, wie du es behoben hast?

@preetluv siehe die Antwort von cosinus84

Sie können Folgendes tun: -

Aktionen.pop()
setTimeout(()=> Actions.refresh({"somePropToRefresh":Math.random(),"yourProp":"um die
vorheriger Bildschirm beim Zurückgehen"}),0.5);

Sie können die "yourProp" in der KomponenteWillReceiveProps im vorherigen Bildschirm überprüfen, nachdem Sie dies getan haben.

Ich benutze react-native-router-flux 4.2.0-beta.2 und es funktioniert mit setTimeout

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen