У меня есть TabNavigator, и на каждой вкладке есть StackNavigator.Внутри StackNavigator у меня есть экраны.Экраны в каждой вкладке не вызывают друг друга напрямую;TabNavigator обрабатывает изменения экрана при нажатии вкладки.
На первой вкладке, если пользователь нажимает кнопку, создаются некоторые данные.Если пользователь затем перейдет ко второй вкладке, я хотел бы передать эти данные на экран во второй вкладке.
Вот демонстрационная версия кода:
import React from 'react';
import { Button, Text, View } from 'react-native';
import {
createBottomTabNavigator,
createStackNavigator,
} from 'react-navigation';
class HomeScreen extends React.Component {
doIt = () => {
this.props.navigation.setParams({results: ['one', 'two']}); // <--- set data when user clicks button.
}
render() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
{/* other code from before here */}
<Button
title="Set Results"
onPress={this.doIt}
/>
</View>
);
}
}
class SettingsScreen extends React.Component {
render() {
console.log(this.props.navigation); // <--- console out when user clicks on this tab
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Settings</Text>
</View>
);
}
}
const HomeStack = createStackNavigator({
Home: HomeScreen,
});
const SettingsStack = createStackNavigator({
Settings: SettingsScreen,
});
export default createBottomTabNavigator(
{
Home: HomeStack,
Settings: SettingsStack,
},
{
}
);
The this.props.navigation.state.params
никогда не получает данные results
во второй вкладке.Для него даже нет ключа, поэтому, если я попытаюсь получить доступ к this.props.navigation.state.params.results
, он будет неопределенным.
Это сбивает с толку, потому что я думал, что props.navigation
передается на все экраны автоматически .
Как передать данные с одного экрана на другой через TabNavigator, используя только реагирующую навигацию?Я видел ответы, в которых говорится, что нужно использовать Redux, но я не хотел бы импортировать другую библиотеку, если все, что мне нужно, это сохранять некоторое состояние на разных экранах в разных реагирующих навигаторах.