В настоящее время у меня есть StackNavigator, который содержит два TabNavigator.
AppNavigator.js:
import React from 'react';
import { createAppContainer, createStackNavigator } from 'react-navigation';
import MainTabNavigator from './MainTabNavigator';
import CharacterTabNavigator from './CharacterTabNavigator';
export default createAppContainer(createStackNavigator({
Main: MainTabNavigator,
Character: CharacterTabNavigator,
}));
App.js
import React from 'react';
import { Platform, StatusBar, StyleSheet, View } from 'react-native';
import { AppLoading, Asset, Font, Icon } from 'expo';
import AppNavigator from './navigation/AppNavigator';
export default class App extends React.Component {
state = {
isLoadingComplete: false,
};
render() {
if (!this.state.isLoadingComplete && !this.props.skipLoadingScreen) {
return (
<AppLoading
startAsync={this._loadResourcesAsync}
onError={this._handleLoadingError}
onFinish={this._handleFinishLoading}
/>
);
} else {
return (
<View style={styles.container}>
{Platform.OS === 'ios' && <StatusBar barStyle="default" />}
<AppNavigator />
</View>
);
}
}
_loadResourcesAsync = async () => {
return Promise.all([
Asset.loadAsync([
require('./assets/images/robot-dev.png'),
require('./assets/images/robot-prod.png'),
]),
Font.loadAsync({
// This is the font that we are using for our tab bar
...Icon.Ionicons.font,
// We include SpaceMono because we use it in HomeScreen.js. Feel free
// to remove this if you are not using it in your app
'space-mono': require('./assets/fonts/SpaceMono-Regular.ttf'),
}),
]);
};
_handleLoadingError = error => {
console.warn(error);
};
_handleFinishLoading = () => {
this.setState({ isLoadingComplete: true });
};
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
},
});
HomeScreen.js (первый изMainTabNavigator):
import React from 'react';
import {
ScrollView,
Text,
TouchableOpacity,
View,
} from 'react-native';
export default class HomeScreen extends React.Component {
static navigationOptions = {
header: null,
};
constructor(props) {
super(props);
}
render() {
return (
<View>
<ScrollView>
<TouchableOpacity activeOpacity={0.5} onPress={() => this.props.navigation.navigate('Character',{ name: 'Brent' })}>
<Text>Character1</Text>
</TouchableOpacity>
</ScrollView>
</View>
);
}
}
И затем я пытаюсь получить имя на первом экране в CharacterTabNavigator
CharacterStatsScreen.js:
import React from 'react';
import {
Text,
View,
} from 'react-native';
export default class CharacterStatsScreen extends React.Component {
constructor(props) {
super(props);
}
render() {
console.log(this.props.navigation.state);
const { navigation } = this.props;
const character = navigation.getParam('name', 'NO-Character');
return (
<View>
<Text>{character}</Text>
<Text>Stats</Text>
</View>
)
}
}
Я следовал заобъяснения, приведенные здесь: https://reactnavigation.org/docs/en/params.html
Но я не могу получить имя.
Моя текущая настройка:
- MainTabNavigator
- HomeScreen
- LinkScreen
- SettingScreen
- CharacterTabNavigator
- CharacterStatsScreen
- CharacterSpellsScreen
- CharacterInventoryScreen
- CharacterJobsScreen
Идея состоит в том, что когда вы загружаете приложение в MainTabNavigator, у вас есть основные функции, и на главном экране для каждого персонажа есть карточка и при нажатиикарта, которую я хотел бы иметь возможностьn (с помощью кнопки «назад») CharacterTabNavigator, передавая ему символьную опору.
Текущий рабочий поток, но без получения параметров:
Как я могу передать реквизит (будет объектом javascript)?
У меня также могут возникнуть проблемы с настройками при получениик заголовкам.