【问题标题】:How can I use redux and graphql with apollo client in the same react app?如何在同一个 React 应用程序中将 redux 和 graphql 与 apollo 客户端一起使用?
【发布时间】:2021-09-21 16:12:54
【问题描述】:

我正在做一个项目,我正在使用 apollo/client,react 中的 graphql,而对于全局状态管理,我必须使用 redux。我很确定我必须在我的项目中处理更多数据,所以我会把它放在我的商店里。 我想知道如何使用 apollo 客户端进行 redux 操作以从 graphql 端点获取数据

第一部分是我设置 apollo 客户端的 index.js。


    import React from "react";
    import ReactDOM from "react-dom";
    import App from './App.jsx';
    import {BrowserRouter} from "react-router-dom";
    import store from "./store";
    import { Provider } from "react-redux";
    import ApolloClient from 'apollo-boost';
    import { ApolloProvider } from 'react-apollo';
    import {InMemoryCache} from "@apollo/client";
    
     const client = new ApolloClient({
        uri: 'http://localhost:4000/graphql',
        cache: new InMemoryCache()
      });
    
    ReactDOM.render(
        <React.StrictMode>
         <ApolloProvider client={client}>
        <Provider store={store}>
        <BrowserRouter>
            <App />
            </BrowserRouter>
            </Provider>
            </ApolloProvider>
        </React.StrictMode>,
        document.getElementById("root")
    );

我在完成 redux 的动作文件时遇到问题。 它没有向应用程序的其余部分发送数据。


    import {
     FETCH_PRODUCTS,
     FETCH_PRODUCTS_FAIL,
     FETCH_PRODUCTS_SUCCESS } from "../types";
    import {gql} from "apollo-boost";
    
    const getProductsQuery = gql`
    {
        category{
           products{
               name
               inStock
              gallery
              category
              prices{
                  currency
                  amount
              }
       }
    }
    
    }
    `
    
    const fetchProducts = () => async(dispatch) =>{
        dispatch({
             type: FETCH_PRODUCTS,
         });
    
         try{
    
           //how can I get data from GRAPHQL by using apollo client
    
             dispatch({
                 type:FETCH_PRODUCTS_SUCCESS,
                 payload:data,
             });
            
         }
         catch(error){
             dispatch({
                 type: FETCH_PRODUCTS_FAIL,
                 payload:error.message
             });
         }
    
    }
    // export default graphql(getProductsQuery);
    export {fetchProducts};

【问题讨论】:

    标签: javascript reactjs redux graphql


    【解决方案1】:

    当您使用 Apollo 时,您真的不应该将这些数据放入 Redux。您仍然可以将 Redux 用于其他东西,但 apollo 的工作是保存这些数据并使其在您的组件中可用。将其取出并放入 Redux 意味着您将工作加倍而没有额外的好处,更糟糕的是,您很有可能在两层之间引入大量异步。

    【讨论】:

    • 感谢您的回复,但我需要通过 apollo 获得的数据用于 redux 操作!我真的不明白我必须做什么..我该怎么做??
    • 使用 apollo 钩子时,您的组件中有可用的数据。当然你可以将它发送到 redux,但你真的应该重新考虑这一点。对于服务器的每种类型的请求,您都应该使用 apollo,并且使用 apollo 已经可以在整个应用程序中访问数据。这些数据通常不应该接触 redux。
    猜你喜欢
    • 2021-07-07
    • 2021-03-05
    • 2019-03-28
    • 2023-03-19
    • 2017-07-26
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多