【问题标题】:Epic not returning stream in Redux-ObservableEpic 未在 Redux-Observable 中返回流
【发布时间】:2017-05-13 23:42:56
【问题描述】:

我正在使用 redux-observable 和一个附带项目进行测试,但我反复遇到这个问题:Uncaught TypeError: combineEpics: one of the provided Epics "handleSearchEpic" does not return a stream. Double check you're not missing a return statement!

我已经在网上参考了 redux observable 文档和其他几个示例,但我无法确定我可能遗漏了什么。以下是我的行动和有问题的史诗。

export const searchContent = query => {
  return {
    type: SEARCH_CONTENT,
    query
  }
}

const returnSearchContent = searchResults => {
  return function(dispatch) {
    dispatch({
      type: RETURN_SEARCH_CONTENT,
      searchResults
    });
  }
}

// Epics
export const handleSearchEpic = action$ => {
  action$.ofType(SEARCH_CONTENT)
    .mergeMap(action => axios.get(`...SOME_API_ENDPOINT`))
    .map(res => returnSearchContent(res))
}

export const rootEpic = combineEpics(
  handleSearchEpic
);

这是应用程序的根目录和商店配置:

const epicMiddleware = createEpicMiddleware(rootEpic);
const store = createStore(Reducer, applyMiddleware(epicMiddleware));

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

【问题讨论】:

    标签: javascript rxjs redux-observable


    【解决方案1】:

    您的handleSearchEpic 史诗是一个箭头函数带有块,但实际上并不返回流。

    不好

    export const handleSearchEpic = action$ => { // <-- start of block
      // vvvvvvv missing return
      action$.ofType(SEARCH_CONTENT)
        .mergeMap(action => axios.get(`...SOME_API_ENDPOINT`))
        .map(res => returnSearchContent(res))
    } // <-- end of block
    

    export const handleSearchEpic = action$ => {
      return action$.ofType(SEARCH_CONTENT)
        .mergeMap(action => axios.get(`...SOME_API_ENDPOINT`))
        .map(res => returnSearchContent(res))
    }
    

    隐式返回?

    或者,您可以删除块并使用隐式返回,这可能是您的本意?

    export const handleSearchEpic = action$ => // <--- no block
      action$.ofType(SEARCH_CONTENT)
        .mergeMap(action => axios.get(`...SOME_API_ENDPOINT`))
        .map(res => returnSearchContent(res));
    

    一个非常常见的错误,这就是为什么我添加了您提供的错误消息,但它似乎并没有使解决方案易于理解。有什么建议可以改善错误信息吗?

    combineEpics:提供的史诗“handleSearchEpic”之一不返回流。仔细检查您没有遗漏退货声明!

    【讨论】:

    • 哦,嘿,谢谢!我真的很喜欢你关于图书馆的谈话。一流的。
    • 我认为我的错误可能只是这里的菜鸟错误。我绝对是在尝试模拟隐式返回,但忘记了大括号。我认为改进错误消息可能就像添加Double check you're either using a return statement or an es6 implicit return 一样简单。不过,也许其他一些人可能有更好的意见?
    • 为什么错误消息必须只有一行,结果通常非常不清楚?为什么不能像您的答案一样长约 15 行,并显示导致错误的最常见错误是什么,并非常有帮助地展示您的两种不同方法来使其正常工作?错误消息仍然在中世纪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2021-01-09
    • 2017-09-16
    • 1970-01-01
    • 2020-12-08
    • 2017-10-07
    • 2018-03-19
    相关资源
    最近更新 更多