React-native-router-flux: Actions.refresh не работает

Созданный на 18 окт. 2017  ·  24Комментарии  ·  Источник: aksonov/react-native-router-flux

Версия

Сообщите нам, какие версии вы используете:

  • реакция-родной поток-маршрутизатор v4.0.0-beta.12
  • реагировать родной 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. вызвать action.refresh, нажав кнопку/запустив какое-либо событие
needs response from author

Самый полезный комментарий

@jaysassyinfotech
Actions.refresh({ключ: Actions.currentScene}); не работает второй раз
Это работает, если вы делаете так :)
Actions.refresh({ключ: Math.random()})

Все 24 Комментарий

+1
я хочу использовать renderBackButton из сцены. Мой пример кода,

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

Это не работает. Я думаю, что это та же проблема.

Попробуйте leftButton вместо renderBackButton и передайте ему Component.

@kesha-antonov Не работает. Я создаю новую проблему для этого.

Меня устраивает. ррнф-4-бета22

leftButton для левого значка
right для правой иконки

общедоступный компонентWillMount (): недействительным {
this.props.navigation.setParams({
справа: () => {this.myOnRight();},
rightTitle:'новыйЗаголовок',
});
}
Это работает для меня.

Господи, я пришел сюда в поисках ответа на первоначальный вопрос.
Пожалуйста, постарайтесь не лезть в чужие дела!

У меня такая же проблема, НО при обновлении магазина (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()}/>
        )
    }
}

та же проблема, я использую избыточность, и когда я пытаюсь обновить правую кнопку, она просто не обновляется.

Пожалуйста, воспроизведите проблему с примером проекта.

Actions.refresh({ key: Actions.currentScene }); не работает во второй раз
https://github.com/aksonov/react-native-router-flux/issues/2862
@aksonov

@jaysassyinfotech
Actions.refresh({ключ: Actions.currentScene}); не работает второй раз
Это работает, если вы делаете так :)
Actions.refresh({ключ: Math.random()})

@ cosinus84 Вы, сэр, спасатель.

@ cosinus84 Это действительно работа. Вот это да
Но есть ли какое-нибудь объяснение, почему Math.random() выполняет все трюки?

@cosinus84 ты крутой мужик (у)

Надеюсь, рандом не нужен для последней версии сейчас

@aksonov Пожалуйста, не могли бы вы перечислить реквизиты (с их функциями), которые мы можем использовать в Actions.refresh(), поскольку реквизиты сцены, похоже, здесь не работают.

Вы можете проверить пример приложения и его вызовы обновления - оно отлично работает с последней версией 4.0.5. Не стесняйтесь клонировать и модифицировать пример соответствующим образом, чтобы продемонстрировать проблему.

Да, это работает нормально, но я предлагаю вам составить список реквизитов, которые будут использоваться с вызовами обновления, поскольку мы можем не знать, какой из них использовать, когда.
Например, чтобы отобразить кнопку «Назад», нам нужно использовать реквизит leftButton , но я не знал об этом, пока не прочитал комментарий @kesha-antonov.

это работает

@preetluv не подскажете , как вы это исправили?

@preetluv см. ответ cosinus84

вы можете сделать следующее: -

Действия.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 рейтинги