ReactDOM期待String但返回一个Object

问题描述 投票:0回答:1

我正在使用React和Graphql运行应用程序。我收到以下错误:

Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.

运行以下代码时:

import React from 'react';
import ReactDOM from 'react-dom';
import { ApolloProvider } from 'react-apollo';
import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';

import Routes from './routes';
import registerServiceWorker from './registerServiceWorker';

const client = new ApolloClient({
  link: new HttpLink({ uri: 'http://localhost:8080' }),
  cache: new InMemoryCache(),
});

const App = (
  <ApolloProvider client={client}>
     <Routes />
  </ApolloProvider>
);

ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();

我收到包含ReactDOM.render();的行的错误,因为它返回的是一个对象而不是一个字符串。我不明白为什么它要求一个String并返回一个对象。

在路线目录中,我有:

index.js:

import React from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';

import Home from './Home';

export default () => (
  <BrowserRouter>
    <Switch>
      <Route path="/" exact component={Home} />
    </Switch>
  </BrowserRouter>
);

和Home.js

import React from 'react';
import { graphql } from 'react-apollo';
import gql from 'graphql-tag';

const Home = ({ data: { loading, allUsers } }) =>
  (loading ? null : allUsers.map(u => <h1 key={u.id}>{u.email}</h1>));

const allUsersQuery = gql`
  {
    allUsers {
      id
      email
    }
  }
`;

export default graphql(allUsersQuery)(Home);
javascript reactjs graphql graphql-js
1个回答
1
投票

我不知道确切的原因,也许有人可以插话,但你不能有这样的组件:

const App = (
  <ApolloProvider client={client}>
     <Routes />
  </ApolloProvider>
);

如果你使用ReactDOM.render(<App />, ...)

如果您将其更改为功能组件,如下所示,它应该工作:

const App = () => (
  <ApolloProvider client={client}>
     <Routes />
  </ApolloProvider>
);

但是,您也可以在不将其更改为函数的情况下执行ReactDOM.render(App, ...)

© www.soinside.com 2019 - 2024. All rights reserved.