如何在 saga 文件中获取 redux 状态
Posted
技术标签:
【中文标题】如何在 saga 文件中获取 redux 状态【英文标题】:how to get redux state inside saga file 【发布时间】:2021-12-21 10:19:07 【问题描述】:我需要从 redux 获取状态,以便在 saga 文件中的 API 调用中使用它。 我检查了选择 API。但这是一个问题。 我想将一个函数仅用于 API 调用。要运行这个函数,我需要从 redux 获取当前状态。而不是把它放在生成器函数中,我没有成功使用选择。
async function getApi()
// GET THE STATE IN THE NEXT LINE
try
const callByCity = await fetch(`https://www.test.com/APICALL$REDUX STATE...
`)
const result= await callByCity.json()
return result
catch(error)
console.log(error.message)
function* fetchMainCity(action)
try
const mainCity = yield call(getApi);
yield put( type: "GET_CITY_SUCCESS", result: result)
catch (e)
yield put(type: "GET_CITY_FAILED", message: "Sorry, We Have A Problem.")
【问题讨论】:
请显示您是如何使用 select 的? @RamanNikitsenka 我尝试了几种方法,正如我在一些示例中看到的那样。它没有用,可能是我做错了。我现在添加它 这能回答你的问题吗? redux saga selectors, how do I access state from a saga? 【参考方案1】:顺便说一句,你也可以在你的 redux 状态下获得一个字段 假设你的 redux 状态是这样的
key1: val1 , key2:
你可以
const key1 = yield select(state => state.key1)
.
因为通常你不想选择整个 redux 状态
【讨论】:
酷!非常感谢!【参考方案2】:你有一个传奇和一个async
函数的混合体。您可以在传奇中获得状态。您无法在 async
函数中获取它。所以如果你想让getApi作为一个异步函数,你需要先获取状态,然后传入:
function* fetchMainCity(action)
try
const state = yield select();
const mainCity = yield call(getApi, state);
//...etc
async function getApi(state)
// do stuff with the state
或者,如果您将getApi
更改为saga,那么它可以从状态本身中进行选择:
function* getApi()
try
const state = yield select();
const callByCity = yield fetch(`https://www.test.com/APICALL$/* state stuff */`);
const result = yield callByCity.json();
return result;
catch (error)
console.log(error.message);
【讨论】:
知道了!非常感谢!以上是关于如何在 saga 文件中获取 redux 状态的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 redux-saga 在 getInitialProps 中获取数据。然后在 getInitialProps 方法中从 redux store 获取响应?
Redux saga:我如何确保只有我的 saga 能够更新某个状态?
Redux学习——redux-saga的使用编写中间件函数Reducer文件拆分