Как я писал в комментариях, критическая ситуация здесь заключается в том, что в navigationOptions
вы можете просто положиться на navigation
prop для повторного рендеринга заголовка. Сначала я думаю о React Context API , но вы не можете получить доступ к контексту там.
По сути, ваша DownloadedToday
функция должна быть внутри React экрана которая является частью навигационной системы для того, чтобы изменить навигационную опору : прекрасной идеей может быть создать пользовательский хук для извлечения значения и использования его на текущем экране (Я могу показать вам это также, если вы спросите меня).
включите ваш пользовательский хук в ваш экран и подпишитесь на его изменения:
const { lastUpdate } = useYourCustomHook()
useEffect(() => {
//
}, [lastUpdate])
теперь мы можем играть с
параметрами навигации : идея состоит в том, чтобы отредактировать указанный параметр c, который будет отвечать за отключение кнопки, назовем его
disableHeaderButton
; при условии, что для этого
по умолчанию установлено значение false (кнопка включена по умолчанию),
useEffect
станет:
useEffect(() => {
// if lastUpdate is true, we will trigger a navigation action which will disable the button
if (lastUpdate) navigation.setParams({ disableHeaderButton: true })
}, [lastUpdate])
Отредактируйте stackNavigator
, чтобы установить значение по умолчанию для disableHeaderButton
param!
Измените navigationOptions
в свой стек следующим образом:
navigationOptions: ({ navigation }) => ({
title: 'Home',
headerTitle: '',
headerRight: () => (
<TouchableOpacity
style={styles.headerRight}
disabled={navigation.state?.routes[navigation.state.index].params?.disableHeaderButton}
>
<AntDesign
name = 'download'
size = {23}
color = 'grey'
/>
</TouchableOpacity>
)
})
Что такое navigation.state? .Routes [navigation.state.index] .params? .DisableHeaderButton ?
С этим выражением вы скажем реагировать на навигацию, чтобы посмотреть параметры текущего активного экрана (routes
- это массив маршрутов, проиндексированных по их текущему state.index
), поэтому, если параметр отредактирован, ваш заголовок навигации теперь знает, что пора повторно -render!