【问题标题】:Redux saga is is going to catch() instead of putting the actionRedux 传奇将 catch() 而不是采取行动
【发布时间】:2020-02-29 21:25:08
【问题描述】:

我在userActions.js有这个动作:

const receiveFilialData = (data) => {
    return {
        type: "RECEIVE_FILIAL_DATA",
        payload: data
    }
}

export default {
    receiveFilialData
}

在我的登录组件中,我正在调度以从 saga 中获取一些数据:

const Login = props => {
  const dispatch = useDispatch()
  const filiais = useSelector(state => state.filiais)
  useEffect(() => {
    dispatch({type: 'GET_FILIAIS_REQUEST'})
  }, [dispatch, filiais])
}

LoginService.js 我正在发出 HTTP 请求:

const fetchFiliais = async () => {
   const response = await fetch(`${baseUrlApi.baseUrlApi}/filiais`);
   const responseJson = await response.json()
   return responseJson
}

export default { 
    fetchFiliais
}

当有 GET_FILIAIS_REQUEST 调度时,我创建了一个 saga 来发出这个请求:

// worker Saga: will be fired on GET_FILIAIS_REQUEST actions
function* fetchFiliais(action) {
    try {
        const data = yield call(LoginService.fetchFiliais())
        console.log(data)
        yield put({type: "RECEIVE_FILIAL_DATA", data});
    } catch (e) {
        yield put({type: 'FETCH_FILIAIS_FAILED', message: e.message})
    }
}

/*
  Starts fetchFiliais on each dispatched `GET_FILIAIS_REQUEST` action.
*/

function* mySaga() {
    yield takeEvery("GET_FILIAIS_REQUEST", fetchFiliais);
}

如果我在LoginService 文件中添加console.log(response.json)fetchFiliais 正在打印我的回复,但yield call() 之后的console.log(data) 没有运行;控制流将转到catch(e) 并抛出:

类型:“FETCH_FILIAIS_FAILED”消息:“调用:参数类型 {context, fn} 未定义或为空 fn"

为什么?

【问题讨论】:

    标签: redux redux-saga


    【解决方案1】:

    已修复,将 LoginService.fetchFiliais 替换为 LoginService.fetchFiliais()) 这不是一个函数,而是一个常量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2023-03-03
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      相关资源
      最近更新 更多