исссу с редуксом и аполлоном 2.x.x - PullRequest
0 голосов
/ 26 апреля 2018

Как мне использовать redux с apollo 2.xx рядом с graphql?У меня есть эта ошибка "configureStore.js: 11 Uncaught TypeError: Невозможно прочитать свойство 'reducer' undefined at ./src/store/configureStore.js.exports.default", и, похоже, оно связано с экземпляром кэша apollo

import React from "react";
import ReactDOM from "react-dom";
import AppRouter from "./routers/AppRouter";
import registerServiceWorker from "./registerServiceWorker";
// 1
import { ApolloProvider } from "react-apollo";
import { ApolloClient   } from "apollo-client";
import { HttpLink } from "apollo-link-http";
import { InMemoryCache } from "apollo-cache-inmemory";
import { ApolloLink } from 'apollo-client-preset';
import {AUTH_TOKEN} from './lib/constants';
import configureStore from './store/configureStore';



import "./styles/App.css";

const httpLink = new HttpLink({ uri: "http://localhost:3000/graphql" });

const middlewareAuthLink = new ApolloLink((operation, forward) => {
    const token = localStorage.getItem(AUTH_TOKEN);
    const authorizationHeader = token ? `Bearer ${token}` : null
    operation.setContext({
      headers: {
        authorization: authorizationHeader
      }
    })
    return forward(operation)
  })

  const httpLinkWithAuthToken = middlewareAuthLink.concat(httpLink)
  console.log("httpLink",httpLink);

  console.log("httpLinkWithAuthToken",httpLinkWithAuthToken);


const store  =configureStore();

export const client = new ApolloClient({
    link: httpLinkWithAuthToken,
    cache: new InMemoryCache()
});


const jsx = (
    <ApolloProvider store={store} client={client}>
        <AppRouter />
    </ApolloProvider>
);

ReactDOM.render(jsx, document.getElementById("app"));

registerServiceWorker();

и магазин настроен следующим образом:

 import { createStore, combineReducers, applyMiddleware, compose } from 'redux';
import {client} from "../app";
import thunk from "redux-thunk";
import { ApolloClient   } from "apollo-client";


export default ()=>{
    const store =createStore(
        combineReducers({
            // classes:classes , 
            apollo:client.reducer(),
        }),
        {}, //initial state
        compose(
            applyMiddleware(client.middleware()),
            thunk.withExtraArgument(client),
            // If you are using the devToolsExtension, you can add it here also
            (typeof window.__REDUX_DEVTOOLS_EXTENSION__ !== 'undefined') ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f,
        )
    );
    return srore;
}
...