Ecmascript 6 异步操作创建者未按预期调度操作

Ecmascript 6 异步操作创建者未按预期调度操作,ecmascript-6,redux,redux-mock-store,Ecmascript 6,Redux,Redux Mock Store,伙计们 我有以下异步操作创建者,它根据当前状态分派另一个操作创建者或返回null。问题是无论当前状态如何,它总是返回null // actions.js export const loadPosts = category => (dispatch, getState) => { const currentState = getState() const posts = currentState.postsByCategory const categoryPosts =

伙计们

我有以下异步操作创建者,它根据当前状态分派另一个操作创建者或返回
null
。问题是无论当前状态如何,它总是返回
null

// actions.js

export const loadPosts = category => (dispatch, getState) => {
  const currentState = getState()
  const posts = currentState.postsByCategory
  const categoryPosts = posts[category]
  const items = categoryPosts.items

  if(items === []) {
    return dispatch(fetchPosts(category))
  }

  return null
}
如您所见,action creator调度
fetchPosts()
取决于
项的值是否等于空数组。我正在测试它,为它提供具有以下结构的初始状态:

// initialState
const initialState = {
  postsByCategory: {
    hot: {
      isFetching: false,
      items: []
    }
  }
}
我显然没有正确地访问
items
属性,但是我看不到代码中的错误在哪里。 我正在用redux mock store对此进行测试,创建一个mockStore实例,并为其提供
initialState
。 希望你们能找出我代码中的错误。
提前感谢。

您的问题在于
比较

if(items === [])

在上面的代码中,项目将不会是
==
[]
,因为它们都是不同的实例。如果要检查
items
是否为空,请使用
items.length==0
。希望这能有所帮助。

您的问题在于
比较

if(items === [])

在上面的代码中,项目将不会是
==
[]
,因为它们都是不同的实例。如果要检查
items
是否为空,请使用
items.length==0
。希望能有帮助。

嘿,伙计,这很有效。谢谢我只是不太明白==[]和使用.length==0之间的区别。它是否与数组元数据有关?你有没有进一步阅读的建议来更好地理解这一点?嘿,伙计,它奏效了。谢谢我只是不太明白==[]和使用.length==0之间的区别。它是否与数组元数据有关?为了更好地理解这一点,你有没有进一步阅读的建议?