react-native
Mejores Prácticas de Navegador
Buscar..
Navegador
Navigator es el navegador predeterminado de React Native. Un componente Navigator administra una pila de objetos de ruta y proporciona métodos para administrar esa pila.
<Navigator
ref={(navigator) => { this.navigator = navigator }}
initialRoute={{ id: 'route1', title: 'Route 1' }}
renderScene={this.renderScene.bind(this)}
configureScene={(route) => Navigator.SceneConfigs.FloatFromRight}
style={{ flex: 1 }}
navigationBar={
// see "Managing the Navigation Bar" below
<Navigator.NavigationBar routeMapper={this.routeMapper} />
}
/>
Gestión de la pila de ruta
En primer lugar, observe el prop initialRoute . Una ruta es simplemente un objeto javascript y puede tomar la forma que desee y tener los valores que desee. Es la forma principal de pasar valores y métodos entre los componentes de la pila de navegación.
El Navigator sabe qué representar en función del valor devuelto por su prop renderScene .
renderScene(route, navigator) {
if (route.id === 'route1') {
return <ExampleScene navigator={navigator} title={route.title} />; // see below
} else if (route.id === 'route2') {
return <ExampleScene navigator={navigator} title={route.title} />; // see below
}
}
Imaginemos una implementación de ExampleScene en este ejemplo:
function ExampleScene(props) {
function forward() {
// this route object will passed along to our `renderScene` function we defined above.
props.navigator.push({ id: 'route2', title: 'Route 2' });
}
function back() {
// `pop` simply pops one route object off the `Navigator`'s stack
props.navigator.pop();
}
return (
<View>
<Text>{props.title}</Text>
<TouchableOpacity onPress={forward}>
<Text>Go forward!</Text>
</TouchableOpacity>
<TouchableOpacity onPress={back}>
<Text>Go Back!</Text>
</TouchableOpacity>
</View>
);
}
Configurando el navegador
Puede configurar las transiciones del Navigator con la opción configureScene prop. Esta es una función que pasa el objeto de route y necesita devolver un objeto de configuración. Estos son los objetos de configuración disponibles:
- Navigator.SceneConfigs.PushFromRight (predeterminado)
- Navigator.SceneConfigs.FloatFromRight
- Navigator.SceneConfigs.FloatFromLeft
- Navigator.SceneConfigs.FloatFromBottom
- Navigator.SceneConfigs.FloatFromBottomAndroid
- Navigator.SceneConfigs.FadeAndroid
- Navigator.SceneConfigs.HorizontalSwipeJump
- Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
- Navigator.SceneConfigs.VerticalUpSwipeJump
- Navigator.SceneConfigs.VerticalDownSwipeJump
Puede devolver uno de estos objetos sin modificación, o puede modificar el objeto de configuración para personalizar las transiciones de navegación. Por ejemplo, para modificar la anchura hit borde para emular más de cerca el iOS UINavigationController 's interactivePopGestureRecognizer :
configureScene={(route) => {
return {
...Navigator.SceneConfigs.FloatFromRight,
gestures: {
pop: {
...Navigator.SceneConfigs.FloatFromRight.gestures.pop,
edgeHitWidth: Dimensions.get('window').width / 2,
},
},
};
}}
Manejando la barra de navegación
El componente Navigator viene con un prop de barra de navigationBar , que teóricamente puede tomar cualquier componente React configurado correctamente. Pero la implementación más común utiliza el Navigator.NavigationBar predeterminado. Esto requiere un prop de routeMapper que puede usar para configurar el aspecto de la barra de navegación según la ruta.
Un routeMapper es un objeto javascript normal con tres funciones: Title , RightButton y LeftButton . Por ejemplo:
const routeMapper = {
LeftButton(route, navigator, index, navState) {
if (index === 0) {
return null;
}
return (
<TouchableOpacity
onPress={() => navigator.pop()}
style={styles.navBarLeftButton}
>
<Text>Back</Text>
</TouchableOpacity>
);
},
RightButton(route, navigator, index, navState) {
return (
<TouchableOpacity
onPress={route.handleRightButtonClick}
style={styles.navBarRightButton}
>
<Text>Next</Text>
</TouchableOpacity>
);
},
Title(route, navigator, index, navState) {
return (
<Text>
{route.title}
</Text>
);
},
};
Ver más
Para obtener una documentación más detallada de cada propuesta, consulte la documentación oficial de React Native para el Navigator y la guía de React Native sobre el uso de los navegadores .
Utilice react-navigation para navegar en reaccionar aplicaciones nativas
Con la ayuda de react-navigation , puede agregar la navegación a su aplicación realmente fácil.
Instalar react-navigation
npm install --save react-navigation Ejemplo:
import { Button, View, Text, AppRegistry } from 'react-native';
import { StackNavigator } from 'react-navigation';
const App = StackNavigator({
FirstPage: {screen: FirstPage},
SecondPage: {screen: SecondPage},
});
class FirstPage extends React.Component {
static navigationOptions = {
title: 'Welcome',
};
render() {
const { navigate } = this.props.navigation;
return (
<Button
title='Go to Second Page'
onPress={() =>
navigate('SecondPage', { name: 'Awesomepankaj' })
}
/>
);
}
}
class SecondPage extends React.Component {
static navigationOptions = ({navigation}) => ({
title: navigation.state.params.name,
});
render() {
const { goBack } = this.props.navigation;
return (
<View>
<Text>Welcome to Second Page</Text>
<Button
title="Go back to First Page"
onPress={() => goBack()}
/>
</View>
);
}
}
navegación nativa de reacción con flujo de enrutador nativo de reacción
Instale usando npm install --save react-native-router-flux
En react-native-router-flux, cada ruta se denomina <Scene>
<Scene key="home" component={LogIn} title="Home" initial />
key Una cadena única que se puede usar para referirse a la escena en particular.
component que componente mostrar, aquí está
title crea una barra de navegación y dale un título 'Inicio'
initial ¿Es esta la primera pantalla de la aplicación?
Ejemplo:
import React from 'react';
import { Scene, Router } from 'react-native-router-flux';
import LogIn from './components/LogIn';
import SecondPage from './components/SecondPage';
const RouterComponent = () => {
return (
<Router>
<Scene key="login" component={LogIn} title="Login Form" initial />
<Scene key="secondPage" component={SecondPage} title="Home" />
</Router>
);
};
export default RouterComponent;
Importe este archivo en el App.js principal (archivo de índice) y renderícelo. Para más información puede visitar este enlace .