Estoy trabajando en un proyecto React Native y no sé por qué no puedo hacer referencia al objeto Navigator. Recibo un error: undefined is not an object (evaluating _this2.refs._navigator.push). Después de un segundo, cuando se activa mi función setTimeout, se produce el error.

Agradezco cualquier ayuda

Aquí está mi código.

App.js

// ... some code initialization...

class App extends Component {
  constructor(props) {
    super(props);
  }

  componentDidMount() {
    setTimeout(() => {
      this.refs._navigator.push(routes[1]);
    }, 1000);
  }

  render() {
    return(
      <Navigator
        initialRoute={routes[0]}
        initialRouteStack={routes}
        renderScene={(route, navigator) => {
          switch (route.index) {
            case 0:
              return <Home />;
            case 1:
              return <About />;
            default:
              return <Home />;
          }
        }}
        ref={(nav) => { this._navigator = nav; }}
      />
    );
  }

}

const routes = [
  {title: 'Home', index: 0},
  {title: 'About', index: 1},
  {title: 'Cars', index: 2}
];
0
Pablo Darde 31 dic. 2016 a las 21:13

1 respuesta

La mejor respuesta

Intente hacer esto en componentDidMount:

componentDidMount() {
  setTimeout(() => {
    this._navigator.push(routes[1]);
  }, 1000);
}

Esto se debe a que está haciendo referencia al navegador como this._navigator en su Navigator ref.

0
Nader Dabit 31 dic. 2016 a las 21:36
Hola @Nader, muchas gracias. Esto me parece un poco confuso, porque, en React puro, debo poner la palabra "refs" para obtener esto. Por cierto. Gracias.
 – 
Pablo Darde
31 dic. 2016 a las 21:59
1
En realidad no, está asignando el this._navigator en la devolución de llamada de referencia, por lo que está disponible allí
 – 
Icepickle
31 dic. 2016 a las 22:01
1
Oh, tiene razón, tal vez, la palabra clave 'refs' era necesaria para la forma obsoleta de referenciar un elemento, como: obsoleto recomendado < / b> {this.element = el; }} ... Gracias
 – 
Pablo Darde
31 dic. 2016 a las 22:06
this.refs tendría sentido si lo hicieras <Navigator ref="nav" />. Entonces puedes hacer this.refs.nav
 – 
andy9775
31 dic. 2016 a las 22:25