我有一个反应16应用程序,我只是想尝试升级到apollo2。 差不多相同的代码适用于Apollo1。
这是我的 index.js 文件
import React from "react"
import ReactDOM from "react-dom"
import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
import { ReduxCache, apolloReducer } from 'apollo-cache-redux';
import { ApolloProvider } from 'react-apollo';
import Routes from "./router/routes"
import getStore from "./store"
import registerServiceWorker from "./registerServiceWorker"
//See https://github.com/rportugal/apollo-cache-redux
const apolloStore = getStore(apolloReducer);
console.log('index.js: apolloStore:', apolloStore);
const cache = new ReduxCache({ apolloStore });
console.log('index.js cache:', cache);
const client = new ApolloClient({
link: new HttpLink({ uri: '${FULL_HOST}/qe' }),
cache,
});
console.log('index.js client:', client);
ReactDOM.render(
<ApolloProvider client={client} store={apolloStore} >
<Routes />
</ApolloProvider>,
document.getElementById("root")
)
registerServiceWorker()
store.js
import { createStore, applyMiddleware, compose } from "redux"
import { persistStore, autoRehydrate } from "redux-persist"
import thunk from "redux-thunk"
import createReducers from "./reducers"
const isProd = process.env.NODE_ENV === "production"
const middlewares = [
thunk,
,
].filter(m => m) // We want to conditionally add middlewares so we need to remove falsey values
const middleware = applyMiddleware(...middlewares)
export default function getStore(apolloReducer) {
const store = createStore(
createReducers({
apollo: apolloReducer,
}),
/* eslint-disable no-underscore-dangle */
isProd || !window.__REDUX_DEVTOOLS_EXTENSION__
? undefined
: window.__REDUX_DEVTOOLS_EXTENSION__(),
/* eslint-enable */
compose(middleware, autoRehydrate())
)
persistStore(store, {
// We must add the key name for any reducer that we wish to persist here
whitelist: ["pageBuilder", "tracking"],
})
return store
}
reducers.js
import { combineReducers } from "redux"
import logs from "./logs"
import {
createAudienceName,
createAudienceDescription,
} from "./create-audience"
function createReducer(withReducers) {
return combineReducers({
createAudienceDisplayError,
createAudienceDescriptionError,
createAudienceNameError,
logs,
...withReducers,
})
}
export default createReducer
package.json依赖项
"dependencies": {
"all-countries": "^2.0.2",
"apollo-link-http": "^1.5.4",
"brace": "^0.10.0",
"braintree-web-drop-in": "^1.7.0",
"chalk": "1.1.3",
"deep-equal": "^1.0.1",
"dotenv": "4.0.0",
"draft-js": "^0.10.1",
"draft-js-buttons": "^2.0.0-beta6",
"draft-js-inline-toolbar-plugin": "^2.0.0-beta6",
"draft-js-plugins-editor": "^2.0.0-rc8",
"graphql": "^0.13.2",
"graphql-tag": "^2.9.1",
"grommet": "^1.6.0",
"grommet-css": "^1.6.0",
"immutability-helper": "^2.4.0",
"lodash": "^4.17.4",
"moment": "^2.19.3",
"moment-immutable": "^1.0.2",
"object-assign": "4.1.1",
"object-path-immutable": "^0.5.2",
"postcss-flexbugs-fixes": "3.0.0",
"promise": "7.1.1",
"prop-types": "^15.5.0",
"react": "^16.3.2",
"react-ace": "^6.0.0",
"react-addons-shallow-compare": "^15.6.0",
"react-apollo": "^2.1.3",
"apollo-cache-redux": "^0.1.0",
"apollo-client": "^2.2.8",
"react-color": "^2.14.1",
"react-dates": "^16.6.1",
"react-dev-utils": "^5.0.1",
"react-dom": "^16.3.2",
"react-error-overlay": "^1.0.9",
"react-instantsearch": "^5.0.3",
"react-moment-proptypes": "^1.5.0",
"react-player": "^1.4.0",
"react-redux": "^5.0.7",
"react-router-dom": "^4.2.2",
"react-rte": "^0.16.1",
"react-select": "^1.2.1",
"redux": "^3.7.2",
"redux-logger": "^3.0.6",
"redux-persist": "^4.8.2",
"redux-thunk": "^2.2.0",
"validator": "^8.2.0",
"whatwg-fetch": "2.0.3",
"yamljs": "^0.3.0"
}
当我启动我的应用程序时 - 我收到此错误。
Could not find "store" in either the context or props of "Connect(App)". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "Connect(App)".
./src/index.js
src/index.js:41
invariant
node_modules/invariant/browser.js:40
new Connect
node_modules/react-redux/es/components/connectAdvanced.js:117
constructClassInstance
node_modules/react-dom/cjs/react-dom.development.js:6801
updateClassComponent
node_modules/react-dom/cjs/react-dom.development.js:8336
beginWork
node_modules/react-dom/cjs/react-dom.development.js:8982
performUnitOfWork
node_modules/react-dom/cjs/react-dom.development.js:11814
workLoop
node_modules/react-dom/cjs/react-dom.development.js:11843
HTMLUnknownElement.callCallback
node_modules/react-dom/cjs/react-dom.development.js:100
invokeGuardedCallbackDev
node_modules/react-dom/cjs/react-dom.development.js:138
invokeGuardedCallback
node_modules/react-dom/cjs/react-dom.development.js:187
replayUnitOfWork
node_modules/react-dom/cjs/react-dom.development.js:11318
renderRoot
node_modules/react-dom/cjs/react-dom.development.js:11885
performWorkOnRoot
node_modules/react-dom/cjs/react-dom.development.js:12449
performWork
node_modules/react-dom/cjs/react-dom.development.js:12370
performSyncWork
node_modules/react-dom/cjs/react-dom.development.js:12347
requestWork
node_modules/react-dom/cjs/react-dom.development.js:12247
scheduleWorkImpl
node_modules/react-dom/cjs/react-dom.development.js:12122
scheduleWork
node_modules/react-dom/cjs/react-dom.development.js:12082
scheduleRootUpdate
node_modules/react-dom/cjs/react-dom.development.js:12710
updateContainerAtExpirationTime
node_modules/react-dom/cjs/react-dom.development.js:12738
updateContainer
node_modules/react-dom/cjs/react-dom.development.js:12765
ReactRoot../node_modules/react-dom/cjs/react-dom.development.js.ReactRoot.render
node_modules/react-dom/cjs/react-dom.development.js:16069
(anonymous function)
node_modules/react-dom/cjs/react-dom.development.js:16488
unbatchedUpdates
node_modules/react-dom/cjs/react-dom.development.js:12557
legacyRenderSubtreeIntoContainer
node_modules/react-dom/cjs/react-dom.development.js:16484
render
node_modules/react-dom/cjs/react-dom.development.js:16543
我需要做些什么来解决这个特定的错误?
更新 如果我导入以下文件
import {Provider} from "react-redux"
并将我的反应渲染方法更改为:
ReactDOM.render(
<ApolloProvider client={client}>
<Provider store={store}>
<Routes/>
</Provider>
</ApolloProvider>,
document.getElementById("root")
)
这个错误消失但它开始抱怨任何地方然后我使用gql 例如:
import { gql } from "react-apollo"
const EDIT_ROUTE = gql`
mutation editRoute(
gql未定义。我应该从其他地方导入gql吗?
答案 0 :(得分:0)
Apollo客户端2.0不再导出gql并要求您直接导入graphql-tag
而不是import { gql } from "react-apollo"
使用import gql from "graphql-tag"