Javascript 如何使用Redux Sagas加载单个对象?

Javascript 如何使用Redux Sagas加载单个对象?,javascript,reactjs,redux,react-redux,redux-saga,Javascript,Reactjs,Redux,React Redux,Redux Saga,我一直在使用redux和sagas进行react项目。 到目前为止,我能够创建一个结构,其中我的组件将发送一个请求列表的操作,然后sagas执行此操作并调用一个函数,该函数将向后端发出请求。然后将该列表存储在redux上,我的组件从redux读取该列表 现在我需要从后端加载一个对象。我考虑过不使用sagas来处理这个请求,但我想使用sagas并将这个对象存储在redux上是有意义的 我不知道如何让rootSaga函数接受以“id”作为参数的我的函数。 为了演示该场景,以下是一些代码: 这是根sa

我一直在使用redux和sagas进行react项目。 到目前为止,我能够创建一个结构,其中我的组件将发送一个请求列表的操作,然后sagas执行此操作并调用一个函数,该函数将向后端发出请求。然后将该列表存储在redux上,我的组件从redux读取该列表

现在我需要从后端加载一个对象。我考虑过不使用sagas来处理这个请求,但我想使用sagas并将这个对象存储在redux上是有意义的

我不知道如何让rootSaga函数接受以“id”作为参数的我的函数。

为了演示该场景,以下是一些代码:

这是根saga函数,它将发出API请求并调用操作来存储在redux上

这是rootSaga函数,它应该获得我调度的操作并触发我的saga函数。问题是它不接受我用参数调用函数。即使可以,我也不知道如何向它传递参数

当然,在所有这些之前,有一个动作是我从我的函数组件发送的


另一件让我困惑的事情是,我所使用的方法是否可行。我可以从我的函数组件发出这个请求,并将数据存储在它的状态中。这样做,我就不会牵涉到redux和sagas。这有意义吗?

您的方法完全正确,因为您应该尝试让每个api调用都抛出您的传奇,但您只是犯了一个小错误

function* loadEvent({ payload }) {
const { id } = payload;
  try {
    const response = yield call(api.get, `localhost:4000/api/${id}`);
    yield put(loadEventSuccess(event));
  } catch (err) {
    yield put(loadFailure());
  }
};

您也不需要导出生成器函数,在我的示例中,我使用axios模拟api get调用。别忘了从“redux saga/effects”导入{call}

您的方法完全正确,因为您应该尝试让每个api调用都抛出您的传奇,但您只是犯了一个小错误

function* loadEvent({ payload }) {
const { id } = payload;
  try {
    const response = yield call(api.get, `localhost:4000/api/${id}`);
    yield put(loadEventSuccess(event));
  } catch (err) {
    yield put(loadFailure());
  }
};

您也不需要导出生成器函数,在我的示例中,我使用axios模拟api get调用。别忘了从“redux saga/effects”导入{call}

我的项目中几乎所有的传奇都使用参数。你有什么错误?ID是否未定义?在这种情况下,请向您的action creator显示返回LOAD\u EVENT\u Request类型的操作是的,我发现我忘了将有效负载放入我的操作中。谢谢我的项目中几乎所有的传奇都使用参数。你有什么错误?ID是否未定义?在这种情况下,请向您的action creator显示返回LOAD\u EVENT\u Request类型的操作是的,我发现我忘了将有效负载放入我的操作中。谢谢谢谢我发现我的“LOAD\u EVENT\u REQUEST”操作正在接受一个参数,但它没有在有效负载中发送该参数。在做了这些之后,我能够在我的生成器函数中得到这个值,就像你展示的那样。但是,我使用的是Typescript,所以它需要一个类型。你知道“有效载荷”应该是什么类型吗?不客气!也许您应该使用负载作为类型对象,但我不是百分之百确定,因为我没有太多的typescript经验。我希望我能帮助你:)谢谢!我发现我的“LOAD\u EVENT\u REQUEST”操作正在接受一个参数,但它没有在有效负载中发送该参数。在做了这些之后,我能够在我的生成器函数中得到这个值,就像你展示的那样。但是,我使用的是Typescript,所以它需要一个类型。你知道“有效载荷”应该是什么类型吗?不客气!也许您应该使用负载作为类型对象,但我不是百分之百确定,因为我没有太多的typescript经验。我希望我能帮助你:)
function* loadEvent({ payload }) {
const { id } = payload;
  try {
    const response = yield call(api.get, `localhost:4000/api/${id}`);
    yield put(loadEventSuccess(event));
  } catch (err) {
    yield put(loadFailure());
  }
};