React-native-router-flux: Actions.refresh não está funcionando

Criado em 18 out. 2017  ·  24Comentários  ·  Fonte: aksonov/react-native-router-flux

Versão

Diga-nos quais versões você está usando:

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

Comportamento esperado

Actions.refresh() atualiza a cena atual.
Se minha abordagem estiver errada ou o Actions.refresh tiver algum requisito, forneça as informações

Comportamento real

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

Quando eu estava na cena de pesquisa (componente simples com estado), estava tentando atualizar a cena usando Actions.refresh. Mas de alguma forma não funcionou.

Passos para reproduzir

  1. Usando a lista de cenas fornecida, vá para pesquisar Componente (era apenas um componente simples com estado)
  2. acionar ações.Atualize pressionando o botão/acionando algum evento
needs response from author

Comentários muito úteis

@jaysassyinfotech
Actions.refresh({ chave: Actions.currentScene }); não funciona segunda vez
Funciona se você fizer assim :)
Actions.refresh({chave: Math.random()})

Todos 24 comentários

+1
eu quero usar renderBackButton da cena. Meu código de exemplo,

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

Não está funcionando. Acho que é o mesmo problema.

Tente leftButton em vez de renderBackButton e passe Component para ele.

@kesha-antonov Não está funcionando. Eu crio um novo problema para isso.

Funciona para mim. rnrf-4-beta22

leftButton para o ícone esquerdo
right para o ícone direito

public componentWillMount(): void {
this.props.navigation.setParams({
onRight: () => {this.myOnRight();},
rightTitle:'newTitle',
});
}
Está funcionando para mim.

Jesus, eu vim aqui procurando uma resposta para o problema original.
Por favor, tente não pegar carona em questões não relacionadas!

Estou com o mesmo problema MAS ao atualizar a loja (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>
    )
  }
}

Tentei acionar o 're-render' chamando Actions.refresh() após a atualização da loja, mas onEnter não está respondendo.

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

issue

@aksonov Você poderia nos indicar a direção certa? :rezar:

Oi

Estou com o mesmo problema... Quando tento atualizar com Actions.refresh() nada acontece

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

mesmo problema aqui, estou usando redux e quando tento atualizar o botão direito, ele simplesmente não atualiza.

Reproduza o problema com o projeto de exemplo.

Actions.refresh({ key: Actions.currentScene }); não está funcionando segunda vez
https://github.com/aksonov/react-native-router-flux/issues/2862
@aksonov

@jaysassyinfotech
Actions.refresh({ chave: Actions.currentScene }); não funciona segunda vez
Funciona se você fizer assim :)
Actions.refresh({chave: Math.random()})

@cosinus84 O senhor é um salva-vidas.

@cosinus84 É realmente um trabalho. Uau
Mas existe alguma explicação por que Math.random() faz todos os truques?

@cosinus84 seu rock man (y)

Espero que random não seja necessário para a versão mais recente agora

@aksonov Por favor, você pode listar os adereços (com suas funções) que podemos usar em Actions.refresh() já que os adereços de cena não parecem estar funcionando aqui.

Você pode verificar o aplicativo de exemplo e suas chamadas de atualização - ele funciona bem com a versão 4.0.5 mais recente. Sinta-se à vontade para clonar e modificar o exemplo de acordo para demonstrar o problema.

Sim, está funcionando bem, mas sugiro que você faça uma lista de adereços a serem usados ​​com chamadas de atualização, pois podemos não saber qual usar quando.
Por exemplo, para renderizar o botão voltar, precisamos usar leftButton prop, mas eu não sabia disso até ler o comentário de @kesha-antonov

está funcionando

@preetluv se importa em me dizer como você consertou?

@preetluv veja a resposta de cosinus84

você pode fazer o seguinte: -

Actions.pop()
setTimeout(()=> Actions.refresh({"somePropToRefresh":Math.random(),"yourProp":"para atualizar o
tela anterior ao voltar"}),0.5);

Você pode verificar o "yourProp" em componentWillReceiveProps na tela anterior depois de fazer o back.

Eu uso react-native-router-flux 4.2.0-beta.2 e funciona com setTimeout

Esta página foi útil?
0 / 5 - 0 avaliações