【发布时间】:2020-07-06 07:07:17
【问题描述】:
首先,touchableOpacity 按钮位于反应导航标题中。我像这样创建一个stackNavigator:
import { DownloadedToday } from './src/components/Functions'
const navigator = createStackNavigator({
Home: {
screen: HomeScreen,
params: {
button: false,
},
navigationOptions: ({ navigation }) => ({
title: 'Home',
headerTitle: '',
headerRight: () => (
<TouchableOpacity style={styles.headerRight}
disabled = {***boolean***}
>
<AntDesign
name = 'download'
size = {23}
color = 'grey'
/>
</TouchableOpacity>
)
})
})
我在另一个文件中有一个异步函数,用于返回布尔值:
export const DownloadedToday = async() => {
//get the current date
let currentDate = new Date().toDateString()
//get the last download date
let lastUpdate = await RetrieveData('downloadDate')
if(lastUpdate === currentDate){
return true
}else{
return false
}
}
从函数返回布尔值完全没有问题。我认为问题在于我正在使用 Promise,所以我不能只分配一个变量并将其插入 - 异步函数总是返回 Promise。我是这些问题的新手,所以我有最艰难的时间试图弄清楚如何使用异步功能并将其插入到 TouchableOpacity disabled 道具中。任何帮助都非常感谢
【问题讨论】:
-
DownloadedToday包含在哪里?它是一个反应组件,一个也是导航屏幕的组件还是只是一个普通的 javascript 文件? -
@vitosorriso - 它只是一个普通的 javascript 文件。就像我上面说的 - DownloadedToday 功能工作正常。它导入也很好 - 但它输出一个承诺 - 我需要布尔值。不知道如何在我需要的地方获取布尔值
-
好的。这里的问题不在于这是异步代码,因为使用 async/await 机制,您可以在 promise 解决时简单地分配一个结果。真正的问题是您需要将 navigation 属性更新为 navigationOptions 以处理重新渲染到标题中。我有一个解决这个问题的想法,但是
DownloadedToday函数需要进入导航系统才能操作该道具。 -
@vitosorriso 我已经改变了它。我也移动了函数
-
所以你想让我写一个答案来解决导航系统内部的这个问题?
标签: react-native async-await react-navigation es6-promise touchableopacity