React-native-router-flux: Actions.refresh no funciona

Creado en 18 oct. 2017  ·  24Comentarios  ·  Fuente: aksonov/react-native-router-flux

Versión

Cuéntanos qué versiones estás usando:

  • reaccionar-nativo-enrutador-flujo v4.0.0-beta.12
  • reaccionar nativo v0.46.4

Comportamiento esperado

Actions.refresh() actualiza la escena actual.
Si mi enfoque fue incorrecto o Actions.refresh tiene algún requisito, proporcione la información.

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

Cuando estaba en la escena de búsqueda (componente simple con estado), estaba tratando de actualizar la escena usando Actions.refresh. Pero de alguna manera no funcionó en absoluto.

pasos para reproducir

  1. Usando la lista de escenas provista, vaya a buscar Componente (era solo un componente simple con estado)
  2. desencadenar acciones. Actualizar presionando el botón / desencadenando algún evento
needs response from author

Comentario más útil

@jaysassyinfotech
Acciones.refresh({ clave: Acciones.escena actual }); no funciona la segunda vez
Funciona si te gusta esto :)
Acciones.refresh({clave: Math.random()})

Todos 24 comentarios

+1
quiero usar renderBackButton desde la escena. Mi código de ejemplo,

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

No funciona. Creo que es el mismo problema.

Pruebe leftButton en lugar de renderBackButton y pásele Componente.

@kesha-antonov No funciona. Creo un nuevo problema para esto.

Esto funciona para mi. rnrf-4-beta22

leftButton para el icono de la izquierda
right para el icono de la derecha

public componentWillMount(): void {
this.props.navigation.setParams({
onRight: () => {this.myOnRight();},
título derecho: 'nuevo título',
});
}
Funciona para mí.

Jesús, vine aquí buscando una respuesta para el problema original.
¡Por favor, trate de no llevar a cuestas temas no relacionados!

Tengo el mismo problema PERO al actualizar la tienda (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>
    )
  }
}

Traté de activar el 're-render' llamando a Actions.refresh() después de la actualización de la tienda, pero onEnter no responde.

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

issue

@aksonov ¿Podría indicarnos la dirección correcta? :rezar:

Hola

Tengo el mismo problema... Cuando trato de actualizar con Actions.refresh() no pasa nada

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

mismo problema aquí, estoy usando redux y cuando trato de actualizar el botón derecho, simplemente no se actualiza.

Reproduzca el problema con el proyecto de ejemplo.

Actions.refresh({ key: Actions.currentScene }); no funciona la segunda vez
https://github.com/aksonov/react-native-router-flux/issues/2862
@aksonov

@jaysassyinfotech
Acciones.refresh({ clave: Acciones.escena actual }); no funciona la segunda vez
Funciona si te gusta esto :)
Acciones.refresh({clave: Math.random()})

@cosinus84 Usted, señor, es un salvavidas.

@cosinus84 Es realmente un trabajo. Guau
Pero, ¿hay alguna explicación de por qué Math.random() hace todos los trucos?

@ cosinus84 eres un hombre genial (y)

Con suerte, Random no es necesario para la última versión ahora.

@aksonov Por favor, ¿puede enumerar los accesorios (con sus funciones) que podemos usar en Actions.refresh() ya que los accesorios de escena no parecen funcionar aquí?

Puede verificar la aplicación Ejemplo y sus llamadas de actualización: funciona bien allí con la última versión 4.0.5. Siéntase libre de clonar y modificar el ejemplo en consecuencia para demostrar el problema.

Sí, funciona bien, pero le sugiero que haga una lista de accesorios para usar con las llamadas de actualización, ya que es posible que no sepamos cuál usar y cuándo.
Por ejemplo, para renderizar el botón Atrás necesitamos usar leftButton prop pero no lo sabía hasta que leí el comentario de @kesha-antonov

esta funcionando

@preetluv ¿te importa decirme cómo lo arreglaste?

@preetluv ver la respuesta de cosinus84

puedes hacer lo siguiente:-

Acciones.pop()
setTimeout(()=> Actions.refresh({"somePropToRefresh":Math.random(),"yourProp":"para actualizar el
pantalla anterior al volver"}),0.5);

Puede verificar "yourProp" en componentWillReceiveProps en la pantalla anterior después de hacerlo.

Uso react-native-router-flux 4.2.0-beta.2 y funciona con setTimeout

¿Fue útil esta página
0 / 5 - 0 calificaciones