React native 在调度中检测到状态突变(不是“中间”调度)

React native 在调度中检测到状态突变(不是“中间”调度),react-native,redux,react-native-flatlist,React Native,Redux,React Native Flatlist,…在调度内部,路径为:“chat.messages.0”请查看处理操作{'type':'chat','payload':{'sender':'you','body':'foo'}}的减速器` 我的减速机: chatMessage.js: export default (state, action) => { return Object.assign({}, { ...state, messages: [...state.messages, actio

…在调度内部,路径为:“chat.messages.0”请查看处理操作{'type':'chat','payload':{'sender':'you','body':'foo'}}的减速器`

我的减速机:

chatMessage.js:
export default (state, action) => {
    return Object.assign({}, {
        ...state,
        messages: [...state.messages, action.payload]
    })
}
有趣的是,如果我在聊天组件中使用
messages=[]
,则不会出现此错误

export default class Chat extends React.Component {
  state = {...this.props.data, input: "", toggle: false}

  _renderItem = ({item}) => {
    return <ChatMessageRow data={item} />
  }

  render() {
    // var {messages} = this.state
    var messages = []
return (
      <View style={styles.container}>
        <FlatList
          inverted
          renderItem={this._renderItem}
          style={styles.logWrapper}
          data={messages.reverse()}
          extraData={this.state.toggle}
        />
在我的减速机中,同样的错误

编辑:

我的减速器已更新为chatMessage.js

我想问题在于我怎么称呼这个

我正在编写一个websocket控制器。当我发送一条消息时,我不需要像发送HTTP响应一样等待响应

我的websocket控制器:

    onMessage = ({data}) => {
        const json = JSON.parse(data)
        if (json) {
            if (json.status) {
                const reducer = this.stateFilters[json.status]
                if (reducer) {
                    reducer(json.body)
                } else {
                    console.log("No reducer")
                }
            }
        }
    }
websocket控制器是在“我的视图”组件中创建的:

my main view

import {ChatStateFilters} from '../../reducers/chat'

const mapDispatch = { chatMessage }

this.wsController = new WebSocketController({
      stateFilters: {chatMessage: this.props.chatMessage},
来自chat reducer文件(包含chatMessage reducer)

这些状态过滤器是在我创建切片时创建的

stateFilter['chatMessage']的值——这是在
mapDispatchToProp

这个功能是:

let fn = (payload) => {
      return dispatch => {
          dispatch(stateFilters[actionName](payload))
      }
    }
exportedStateFilters[actionName] = fn
我认为问题出在这里的某个地方^……不知怎么的,调度正在启动,更新状态,但redux不知道调度已经完成

编辑2:

我认为缺少异步可能是一个问题。因此我将stateFilter(视图中绑定到我的道具的fn)更改为:

现在它又工作了几次……然后给我一个错误“在调度之间检测到状态突变”

我的聊天信息仍然是

export default (state, action) => {
    let messages2 = Object.assign([], [...state.messages, action.payload])
  return Object.assign({}, {...state, messages: messages2 })
}

那么为什么会发生这种错误呢?

请显示整个原始还原程序。另外,
消息
在组件中来自何处?如果它来自Redux,
消息。push()
是一个变异。你说的整个还原程序是什么意思?这是我的“导出默认值”的还原程序“谢谢。我正在使用更新的减速器。我编辑了更多的内容。我认为问题来自于映射到Dispatch的函数——我映射了一个操作,该操作立即更新了reducer,而没有异步导出默认值(state,action)=>{const m2=[…state.messages,action.payload]return Object.assign({},state,{messages:m2})}这通过改变我的状态过滤器来修复它,以返回另一个函数,而不是hjsut的disaptsch pf,而且没关系,它并不总是工作的。我不明白这里发生了什么。比赛条件?
let fn = (payload) => {
      return dispatch => {
          dispatch(stateFilters[actionName](payload))
      }
    }
exportedStateFilters[actionName] = fn
   let fn = (payload) => {
      return dispatch => {
        post("", {}, true)
        .then(response => {
          dispatch(stateFilters[actionName](payload))
        })
        .catch(error => {
          dispatch(stateFilters[actionName](payload))
        })
      }
    }
export default (state, action) => {
    let messages2 = Object.assign([], [...state.messages, action.payload])
  return Object.assign({}, {...state, messages: messages2 })
}