Reactjs 当我需要通过react导航发送时,状态尚未就绪
好的,问题出在标题中,我更新了一个状态值,以便在进入React导航对象后立即使用它,该对象将作为参数发送到下一页 这里是我的国家声明:Reactjs 当我需要通过react导航发送时,状态尚未就绪,reactjs,react-native,react-navigation,Reactjs,React Native,React Navigation,好的,问题出在标题中,我更新了一个状态值,以便在进入React导航对象后立即使用它,该对象将作为参数发送到下一页 这里是我的国家声明: const [dataForDetailsPage, setDataForDetailsPage] = useState('') {results.map((item, i) => <ListItem thumbnail key={i} style={{ marginBottom: 5, marginTop: 5 }}&
const [dataForDetailsPage, setDataForDetailsPage] = useState('')
{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>
)}
这里是我的新闻稿:
const [dataForDetailsPage, setDataForDetailsPage] = useState('')
{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>
)}
我尝试将该函数设置为异步函数,并在setDataForDetailPage之前进行等待,但存在相同的问题。之所以发生这种情况,是因为
useState
(setDataForDetailsPage)的setter函数是异步的,这意味着代码的其余部分不会等待运行,直到它完成
您需要设置一个useffect
,以便在每次更新dataForDetailsPage
时运行
像这样
useEffect(() => {
if(dataForDetailsPage != ''){
console.log('DataForDetailsPage : '+ dataForDetailsPage)
navigation.navigate('Details', {
nameFromResultsPage: dataForDetailsPage
})
}
},[dataForDetailsPage])
之所以会发生这种情况,是因为
useState
(setDataForDetailsPage)的setter函数是异步的,这意味着代码的其余部分不会等到它完成后才运行
您需要设置一个useffect
,以便在每次更新dataForDetailsPage
时运行
像这样
useEffect(() => {
if(dataForDetailsPage != ''){
console.log('DataForDetailsPage : '+ dataForDetailsPage)
navigation.navigate('Details', {
nameFromResultsPage: dataForDetailsPage
})
}
},[dataForDetailsPage])
是否尝试使用setState回调
setDataForDetailsPage(itemName,yourCallbackFunction)
@CalvinnuesuseState
setter不接受类似基于类的setState
的回调。为什么不使用itemName
值导航,而不是尝试将其存储在状态并等待渲染周期导航?@Drew Reese,因为我很笨,哈哈。试过使用setState回调吗setDataForDetailsPage(itemName,yourCallbackFunction)
@CalvinnuesuseState
setter不接受类似基于类的setState
的回调。为什么不使用itemName
值导航,而不是尝试将其存储在状态并等待渲染周期导航?@Drew Reese,因为我是哑巴哈哈。Thx这个很好用:)Thx这个很好用:)