代码之家  ›  专栏  ›  技术社区  ›  victor zadorozhnyy

如何订阅redux saga到action?

  •  0
  • victor zadorozhnyy  · 技术社区  · 7 年前

    我有异径鼠尾草的问题。无法成功订阅操作。 我有这个商店的设施

    import { createStore, applyMiddleware, compose } from "redux"
    import createSagaMiddleware from "redux-saga"
    
    import rootSaga from "../config/rootSaga"
    import rootReducer from "../config/rootReducer"
    
    const effects = []
    
    let composeEnhancers = compose
    
    if (process.env.NODE_ENV === "development") {
      composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ // eslint-disable-line no-underscore-dangle
    }
    
    const sagaMiddleware = createSagaMiddleware()
    effects.push(sagaMiddleware)
    
    const store = createStore(rootReducer, {}, composeEnhancers(applyMiddleware(...effects)))
    sagaMiddleware.run(rootSaga)
    
    export default store
    

    看起来Saga中间件不工作。 我在rootsaga中看到console.log,但是当发生redux操作时,saga不起作用。

    export default function* searchRootSaga() {
      console.log("searchRootSaga") // I see this on start
      yield all([fork(throttle, 100, SEARCH.GET.REQUEST, getSearchThis)])
    }
    
    export function* getSearchThis(action) { 
      console.log("getSearchThis") // I dont see this
      try {
        // const response = yield call(API.getSearch, query)
        const response = dummy_data
    
        yield put(getSearchSuccess(response))
      } catch (e) {
        yield put(getSearchFailure("Server Err"))
      }
    }
    

    react dev tools显示search.get.request操作,但saga不起作用。 我做错什么了?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Martin Kadlec    7 年前

    我认为节流阀本身就是一种非阻塞效应。所以你不需要分叉子。尝试:

    yield throttle(100, SEARCH.GET.REQUEST, getSearchThis)