5

编辑:下面回答

我已经在 youtube 上关注了这两个教程(目前没有太多),但它们都不适合我,它从 index.js 中的 Provider 向我发送了这个错误

教程一:视频代码

教程 2:视频代码

元素类型无效:应为字符串(用于内置组件)或类/函数(用于复合组件)但得到:对象。

我的代码 Context.js 文件:

import React from 'react'
export const Context = React.createContext();

index.js

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

import { Context } from './Context'

const client = new ApolloClient({
    link: new HttpLink({ uri: process.env.API_URL }),
    cache: new InMemoryCache()
})

ReactDOM.render(
    <Context.Provider value={{text: 'ok'}}>
        <BrowserRouter>
                <ApolloProvider client={client}>
                    <App />
                </ApolloProvider>
        </BrowserRouter>
    </Context.Provider>
    , document.getElementById('root'));
registerServiceWorker();

我试过/检查了:

  1. 仔细检查我安装了 16.3.1

  2. 将上下文置于内部或外部<BrowserRouter>

  3. 尝试过 {Context} 与 Context

  4. 重新安装 NPM 包

  5. 在 createContext() 中放入 { text: 'ok' }

  6. 我尝试了“create-react-context”,但仍然出现同样的错误,也许这是一个线索?我不知道

  7. 尝试了 react@16.3.0-alpha.0 ,它在教程中有效

  8. 还有一些我没有忘记的东西。

编辑:下面回答

4

2 回答 2

18

检查你是否有 react-dom 16.3.1

于 2018-04-07T03:08:52.767 回答
3

I figured it out. This is a rookie mistake, but I needed to install react-dom@16.3.* , installing react 16.3.* is not sufficient. If anyone else has the error message:

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

This may be why - You have a package that isn't fully updated.

于 2018-04-07T03:42:17.677 回答