reactjs - 当我需要它通过反应导航发送它时,状态还没有准备好
问题描述
好的,所以问题出在标题上,我更新了一个状态值,以便在将它作为参数发送到下一页的 React Navigation 对象之后立即使用它。
这是我的状态声明:
const [dataForDetailsPage, setDataForDetailsPage] = useState('')
这是我的 onPress :
{results.map((item, i) =>
<ListItem thumbnail key={i} style={{ marginBottom: 5, marginTop: 5 }}>
<Left>
{itemPicture !== undefined ?
<Thumbnail square large source={{ uri: results[i].media.logo.big }} />
: <Thumbnail square large source={{ uri: results[i].media.logo.small }} />
}
</Left>
<Body>
<Text style={{ fontWeight: 'bold', fontSize: 16 }}>{item.name}</Text>
<Text note numberOfLines={1}>{item.address}</Text>
<Text note numberOfLines={1}>{item.postalcode} {item.city}</Text>
</Body>
<Right >
<Text style={s.voirPlusBtnTxt} onPress={() => { goToDetailPage(item.name) }}>Voir +</Text>
</Right>
</ListItem>
)}
在这里我的函数称为onPress事件:(必须找到一个技巧,但只能在双击时起作用,因为我第一次单击时,即使我之前更改了状态值,我也不会以某种方式进入第二个条件)
function goToDetailPage(itemName) {
setDataForDetailsPage(itemName)
console.log('itemName : '+itemName) //itemName return the value i want
if(dataForDetailsPage === ''){
setDataForDetailsPage(itemName)
}
if(dataForDetailsPage != ''){
console.log('DataForDetailsPage : '+ dataForDetailsPage)
navigation.navigate('Details', {
nameFromResultsPage: dataForDetailsPage
})
}
}
我试图将函数作为异步函数并在 setDataForDetailPage 之前等待,但同样的问题。
解决方案
发生这种情况的原因是useState
(setDataForDetailsPage) 的 setter 函数是异步的,这意味着其余代码不会等到它完成才运行。
您需要设置一个useEffect
以在每次dataForDetailsPage
更新时运行。
像这样
useEffect(() => {
if(dataForDetailsPage != ''){
console.log('DataForDetailsPage : '+ dataForDetailsPage)
navigation.navigate('Details', {
nameFromResultsPage: dataForDetailsPage
})
}
},[dataForDetailsPage])
推荐阅读
- linux - 无法以root身份运行vscode
- docker - 运行 nginx 服务静态文件和反向代理的 Docker 容器
- php - RouteNotFoundException [登录] Laravel Sanctum
- c++ - 在循环内构造向量并将其返回到该范围之外的安全方法?
- r - 从单个表中查找多个列
- c# - 对象变换 Unity 中的值不正确
- database - google colab/extra_keras_datasets 类号上的 STL-10 错误
- php - 调整交钥匙 PHP 表单以在与表单相同的页面上显示错误消息
- selenium-webdriver - 哪个测试运行器最适合运行 webdriverjs 测试套件
- opencv - 带噪声的特征匹配