[英]React Native Redux: not re-render FlatList after data changed
我正在制作一个应用程序,一个聊天室,当推送到来时我需要它——数据出现在屏幕上。 对于数据,我使用 Redux。 这是我的代码
行动:
export const newMsg = (item, disgussion_id) => {
return {
type: NEW_MESSAGE,
payload: {
item,
disgussion_id
}
}
}
减速器
const initialState = {
messages: {},
}
...
case NEW_MESSAGE:
const message = {...state.messages}
const arr = message[action.payload.disgussion_id]
let exitDate = false
console.log('[New push message]', action.payload.item)
Object.keys(arr).map(e => {
if (arr[e].date === action.payload.item.date) {
arr[e].messages.unshift(action.payload.item)
exitDate = true
}
})
if (!exitDate) {
arr.unshift({
'date': action.payload.item.date,
'messages': [action.payload.item]
})
}
message[action.payload.disgussion_id] = arr
return {
...state,
messages: message
}
聊天.js
const messages = useSelector(state => state.message.messages[route.params.uid]);
...
{
messages && <FlatList
data={messages}
renderItem={({item, index}) => {
return (<Message
date={item.date}
contacts={mainContacts}
item={item}/>)
}}
keyExtractor={(item, index) => String(index)}
inverted={-1}
initialScrollIndex={0}
style={styles.bodyChat}
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onRefresh}/>}
/>
}
当我更改数据时 - 新数据不会出现在 FlatList 中。 我究竟做错了什么?
我的根减速器
const rootReducer = combineReducers({
system: persistReducer(persistConfig, systemReducer),
feed: persistReducer(persistConfig, feedReducer),
message: persistReducer(persistConfig, messageReducer),
})
看起来您的状态包含messages
,但您正在尝试获取state.message.messages
。
如果你改成这个,它应该能够得到新的列表
const messages = useSelector(state => state.messages[route.params.uid]);
如果您为该减速器提供状态结构可能会有所帮助,因为可能存在其他一些问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.