繁体   English   中英

React Native Redux:数据更改后不重新渲染 FlatList

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM