Итак, я нашел ответ, он немного сложнее, чем можно было ожидать: как указал Vinicius, мне нужно использовать опцию навигации tabBarOnPress, но мне также нужно сделать мою функцию отправки доступной для этой опции навигации.
Чтобы сделать это, я обнаружил, что мне нужно передать ссылку на мою функцию отправки (которая доступна как свойство моего экрана) в опцию навигации, поэтому я использовал навигационные параметры, чтобы сделать это, и вот что я 'В итоге мы получили:
HomeScreen.js :
componentDidMount() {
initializeData(this.props);
this.props.navigation.setParams({ homeProps: this.props });
}
export const initializeData = (homeProps) => {
homeProps.resetData(initialValue);
};
const initialValue = ...
AppNavigator.js :
tabBarOnPress: ({navigation, defaultHandler}) => {
const routeName = navigation.state.routeName;
if (navigation.state.params === undefined) {
// no params available
} else if (routeName === 'Home') {
let homeProps = navigation.getParam('homeProps', null);
initializeData(homeProps);
} else if (routeName === ...
...
}
defaultHandler();
}
Примечания:
- Я передаю реквизиты как параметр навигации, а не как функцию отправки (которая также работает), поскольку она более гибкая (например, она делает все из моих доступных функций отправки).
- initializeData () вызывается как во время создания HomeScreen (при первом отображении экрана), так и из значка навигации (для последующих отображений экрана).
- Необходимо проверить, что params определено в параметрах навигации, поскольку оно будет неопределенным при первом отображении экрана (поскольку построение экрана еще не произошло).Это также делает необходимым вызывать initializeData () во время создания экрана.