如何在 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文件拆分

react / redux / sagas - 如何基于现有商店数据链接动作?

如何在 saga 异步请求后设置状态

无法弄清楚如何使用 redux-saga-test-plan 测试 redux-saga 功能