Javascript Redux状态未定义

Javascript Redux状态未定义,javascript,reactjs,redux,Javascript,Reactjs,Redux,当我通过Redux获取数据并使用async await重写我的承诺时,我尝试添加一个加载屏幕,但是运行不太顺利,当我在MapStateTrops中记录我的状态时,我的数据未定义: 但我可以看到: 我不知道为什么我可以在那里看到我的数据,但在试图通过mapStateToProps访问数据时却看不到 下面是一些代码: 行动: 减速器: 我想向您展示我的商店,因为我正在使用autoRehydrate和persistStore 商店: 问题: 因此,我想知道如何停止到处都未定义,继续使用我的应用程序

当我通过Redux获取数据并使用async await重写我的承诺时,我尝试添加一个加载屏幕,但是运行不太顺利,当我在
MapStateTrops
中记录我的
状态时,我的数据未定义:

但我可以看到:

我不知道为什么我可以在那里看到我的数据,但在试图通过
mapStateToProps
访问数据时却看不到

下面是一些代码:

行动: 减速器: 我想向您展示我的商店,因为我正在使用
autoRehydrate
persistStore

商店: 问题: 因此,我想知道如何停止到处都未定义,继续使用我的应用程序。我真的很感激我能得到的一切帮助

谢谢

更新: 在@jonahe(谢谢我的朋友)的建议之后,我将我的代码更新为:

dispatch({ type: 'FETCH_DOORS' })
const doors = await axios.get(`${settings.hostname}/locks`)
dispatch(setDoors(doors.data), { type: 'FETCH_DOORS_SUCCESS' }) // changed this line
但是现在当我记录
状态时
并不是没有定义,而是这(一个
数据对象
): 然后,由于使用我的
.filter
.map
等设置我的道具的方式,出现了一个错误,在出现错误后,我看到了这个(无
数据
对象):
您的
取门成功与否取决于是否存在
有效负载。setDoors
属性。该属性确实存在于您定义的action creator函数中:

const setDoors = data => {
  return {
    type: 'FETCH_DOORS_SUCCESS',
    payload: {
      setDoors: data
    }
  }
}
但是你没有使用动作创造者。您正在使用此代码分派
取回门\u SUCCESS

dispatch({ type: 'FETCH_DOORS_SUCCESS', payload: doors.data })
您也可以在已调度操作的屏幕截图中看到这一点。数据以有效负载的形式存在,但有效负载没有预期的结构。Payload是一个数组,但reducer希望Payload是一个具有
.setDoors
属性的对象


(在
FETCH\u CONTROLLERS\u SUCCESS
中似乎存在类似的问题。)

嗨,谢谢你的提问!你的问题似乎可以解决。请您提供以下信息:1)您收到的错误的确切文本;2)一个指向问题的链接,该链接在某个地方复制,如Codepen(这将非常有用!)@CodeWhisper感谢您的回复。问题是没有警告的文字,什么都没有。我的状态返回未定义,屏幕上没有输出任何内容。我可以为我正在使用的一些文件创建一个沙盒,但如果可以的话,不是我的整个应用程序。@MartinNordström这是一个与您的应用程序不同的问题吗?如果是这样,你应该通过评论或接受正确答案(如果存在这样的答案)来通知那里的人问题已经解决了。你也可以接受它,用于文档目的(这样将来阅读的人可以从中学习,而不必浪费时间试图解决一个已解决的问题)。@jonahe Hello!是的,我理解,但不幸的是,这个问题还没有得到解决。一旦这个问题解决了,我将更新我之前的问题。看来你正在使用redux thunk。但是您的thunk返回的是一个异步函数,我并不完全相信api支持这个函数。相反,将异步部分移到thunkOh中是的,我想我明白你在说什么。我搬走了<代码>调度({type:'FETCH\u DOORS\u SUCCESS',payload:DOORS.data})
,使用
调度(setDoors(DOORS.data),{type:'FETCH\u DOORS\u SUCCESS'})
我可以在控制台中看到数据,但是。当我记录状态时,我可以在
数据
对象中看到我的数据,然后我的代码由于我如何使用
.map()
等键入我的
道具
而出错,但出错后,我可以在
数据
对象中看不到我的数据。请看我问题中的新图片。我已经更新了问题,并对你的答案进行了投票!谢谢。我还没看过你的最新问题。但是,
setDoors
函数已经返回了一个类型为的对象。这就是您应该如何使用它的:dispatch(setDoors(doors.data))。如果您在等待数据之后直接将其console.log,那么响应的结构是否与您期望的一样?它似乎有一个
'.data'
,但可能有一个更深层的结构(例如
data.data
),您只对保留内部部分感兴趣,并将其发送给动作创建者。因此,根据您的发现,代码可能会变成
dispatch(setDoors(doors.data.data))
。分派应该只接受1个参数,而不是2个。尽管如此,我不相信这会修复您丢失的数据
dispatch({ type: 'FETCH_DOORS' })
const doors = await axios.get(`${settings.hostname}/locks`)
dispatch(setDoors(doors.data), { type: 'FETCH_DOORS_SUCCESS' }) // changed this line
const setDoors = data => {
  return {
    type: 'FETCH_DOORS_SUCCESS',
    payload: {
      setDoors: data
    }
  }
}
dispatch({ type: 'FETCH_DOORS_SUCCESS', payload: doors.data })