React Native & RTK Query - 请求成功时调用另一个端点

Posted

技术标签:

【中文标题】React Native & RTK Query - 请求成功时调用另一个端点【英文标题】:Reat Native & RTK Query - Call an other endpoint when request is success 【发布时间】:2022-01-15 20:35:05 【问题描述】:

我是 Redux 和 RTK 查询的新手,我不明白如何在另一个端点的响应成功时从另一个端点获取数据。

我创建了一个这样的 API:

import  Config  from '@/Config'
import  createApi, fetchBaseQuery  from '@reduxjs/toolkit/query/react'

const baseQuery = fetchBaseQuery( baseUrl: Config.API_URL )

const baseQueryWithInterceptor = async (args, api, extraOptions) => 
  let result = await baseQuery(args, api, extraOptions)

  if (result.error && result.error.status === 401) 
    // Deal with unauthorised
  
  return result


export const api = createApi(
  baseQuery: baseQueryWithInterceptor,
  endpoints: () => (),
)

我对每个资源都有一个模块,例如:

// /modules/matches

import  api  from '../../api'
import  fetchMatches  from '@/Services/modules/matches/fetchMatches'

export const matchApi = api.injectEndpoints(
  endpoints: build => (
    fetchMatches: fetchMatches(build),
  ),
  overrideExisting: false,
)

export const  useFetchMatchesQuery  = matchApi


// /modules/matches/fetchMatches

export const fetchMatches = build => 
  return build.query(
    query: type => ( url: `matches/$type` )
  )

因此,在我的组件中,我将其称为:

const  data: matches, error, isLoading  = useFetchMatchesQuery('explorer')

现在,当useFetchMatchesQuery 成功时我需要做的是:

    使用来自useFetchMatchesQuery 响应数据的所有匹配 id 创建一个数组 调用另一个查询以获取参数中带有matchsIds 的其他数据 在渲染 matches 数据的同一组件中使用响应。

谢谢你的帮助????

【问题讨论】:

【参考方案1】:

这是我使用的解决方案:

// /Containers/MyContainer

const [matchesIds, setMatchesIds] = useState([])

const 
    data: matches,
    error: matchesError,
    isLoading: matchesIsLoading,
   = useFetchMatchesQuery('explorer')

  const 
    data: winnerMarkets,
    error: winnerMarketsError,
    isLoading: winnerMarketsIsLoading,
   = useFetchWinnerMarketsQuery(matchesIds,  skip: matchesIds.length === 0 )

  useEffect(() => 
    if (matches) 
      const mIds = []
      matches.map(match => 
         mIds.push(match.id)
      )
      setMatchesIds(mIds)
    
  , [matches])

【讨论】:

谢谢@markerikson :)【参考方案2】:

这里的主要选项是在同一组件中添加第二个useSomeOtherQuery() 挂钩,但“跳过”该查询直到第一个查询完成。这可以通过将skip: false 作为选项传递,或者将skipToken 变量作为查询参数传递:

https://redux-toolkit.js.org/rtk-query/usage/conditional-fetching

【讨论】:

我要试试这个解决方案,谢谢你的回复:)

以上是关于React Native & RTK Query - 请求成功时调用另一个端点的主要内容,如果未能解决你的问题,请参考以下文章

[React Native] Up & Running with React Native & TypeScript

markdown Quảnlýstatetrong React&React Nativekhôngsửdụng州管理库

如何从 React ^0.14.8 & React-native ^0.24.1 升级到 React 15.0.2 和 React-native 0.26.3

react-native & d3 选择库

react native - 如何从 sqlite 表中获取“狗”列表?

React Native基础&入门教程:调试React Native应用的一小步