react-native - React useState 钩子不更新渲染文本
问题描述
我正在使用挂钩来打印对话列表,其中包含联系人的姓名和每个对话的最后一条消息。
如果最后一条消息已更改,我正在使用间隔来检查每个对话。它正在使用 API 查找,我获取内容并使用 setState 更改它,但是当我尝试在渲染部分获取它时,我得到了旧的。
这是一些代码:
const _getMessages = () => {
setDataMsg('');
if (dataContacts) {
dataContacts.map((itemValue, itemIndex) => {
ApiClient.instance.getConversation(itemValue.id).then(response => {
if (response.status === 200) {
setDataMsg([...dataMsg, response.data[response.data.length-1].content]);
console.log('getting all messages ', response.data[response.data.length-1].content);
}
}).catch(error => {
console.log(error);
Alert.alert('Erreur', 'Impossible de récupérer les messages')
})
})
}
else
clearInterval(intervalMsg);
if (props.navigation.state.routeName !== "MessagesPage") {
clearInterval(intervalMsg);
}
}
// Affichage du dernier message //
const _showMessage = (index) => {
if (dataMsg) {
return (dataMsg[index]);
}
return ('Aucun message');
}
和渲染:
<FlatList
style={getStyle().messageList}
data={dataContacts}
extraData={dataMsg}
refreshing={true}
keyExtractor={(item) => {
return item.id.toString();
}}
renderItem={({item, index}) => {
return (
<TouchableOpacity
style={getStyle().card}
onPress={() => {
cardClickEventListener(item)
}}>
<View style={getStyle().cardImage}>
<Image style={getStyle().image}
source={_handleImg(item)}/>
</View>
<View style={getStyle().cardContent}>
<Text
style={[getStyle().name, {fontFamily: props.font}]}>{item.firstName + " " + item.lastName}</Text>
<Text
style={{fontFamily: props.font, fontStyle:'italic'}}>{_showMessage(index)}</Text>
</View>
<View style={getStyle().cardIndicator}>
</View>
</TouchableOpacity>
)
}}/>
解决方案
推荐阅读
- php - PHP - 使用 imagecopy 函数垂直合并两个图像
- asp.net-mvc - Kendo grid Format number with whitespace as thousand separator and two decimal places
- nxp-microcontroller - Unable to find MQX 4.2.0.1 / 4.2.0.2
- php - How to check if a Flash message exists in CakePHP 3?
- node.js - SyntaxError: Unexpected token { at exports.runInThisContext (vm.js:53:16) in elasticdump
- javascript - 年龄组的正则表达式验证
- c# - 尝试将组件交换到正确的位置
- rsa - 在 openssl0.9.8a 中验证 RSA 签名
- constraints - Vivado 约束文件错误
- python - Softmax 神经网络在实现中存在错误,在正确实现中不起作用