Предупреждение: React.createElement: тип недействителен - PullRequest
0 голосов
/ 15 января 2019

Введение

Очень свежо в React, еще свежее в Next и Apollo, так что я надеюсь, что вы простите мой довольно резкий крик о помощи. Я приложил все усилия, чтобы решить эту проблему.

Заранее благодарю всех, кто пытается помочь.

Исследования выполнены

Обычный подозреваемый для

React.createElement: тип недействителен

будет {} против экспорта по умолчанию - но на данный момент я не вижу ничего плохого в этом направлении.

Бонусный вопрос: возможно более точное ведение журнала ошибок

Я предполагаю, что вставленная ниже ошибка - это две отдельные ошибки? Было бы интересно получить номер белья, где именно в MyApp (_app.js) эта ошибка происходит. Любая причина, почему нет номера строки? Я, наверное, неправильно читаю этот журнал.

Ошибка при загрузке домашней страницы моего приложения

Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
in MyApp
in ApolloProvider
in RenderPromisesProvider
TypeError: Cannot read property 'pathname' of undefined
at makePublicRouterInstance (/node_modules/next/dist/lib/router/index.js:180:37)
at MyApp.getChildContext (/node_modules/next/dist/lib/app.js:55:54)
at processChild (/node_modules/react-dom/cjs/react-dom-server.node.development.js:2878:29)
at resolve (/node_modules/react-dom/cjs/react-dom-server.node.development.js:2716:5)
at ReactDOMServerRenderer.render (/node_modules/react-dom/cjs/react-dom-server.node.development.js:3100:22)
at ReactDOMServerRenderer.read (/node_modules/react-dom/cjs/react-dom-server.node.development.js:3059:29)
at renderToStaticMarkup (/node_modules/react-dom/cjs/react-dom-server.node.development.js:3541:27)
at process (/node_modules/react-apollo/react-apollo.umd.js:129:24)

Код, который выплевывает эту ошибку

/ страницы / _app.js

import Layout from "../components/Layout";
import withData from "../lib/apollo";
import App, { Container } from "next/app";
import React from "react";

class MyApp extends App {
  static async getInitialProps({ Component, router, ctx }) {
    let pageProps = {};
    if (Component.getInitialProps) {
      pageProps = await Component.getInitialProps(ctx);
    }
    return { pageProps };
  }

  render() {
    const { Component, pageProps, isAuthenticated, ctx } = this.props;
    return (
      <Container>
        <Layout isAuthenticated={isAuthenticated} {...pageProps}>
          <Component {...pageProps} />
        </Layout>

        <style jsx global>
          {`
            a {
              color: white !important;
            }
            a:link {
              text-decoration: none !important;
              color: white !important;
            }
            a:hover {
              color: white;
            }
            .card {
              display: inline-block !important;
            }
            .card-columns {
              column-count: 3;
            }
          `}
        </style>
      </Container>
    );
  }
}
export default withData(MyApp);

/ Библиотека / apollo.js

import { HttpLink } from "apollo-link-http";
import { withData } from "next-apollo";

const config = {
  link: new HttpLink({
    uri: "http://localhost:1337/graphql", // Server URL (must be absolute)
  })
};
export default withData(config);

package.json (для просмотра версий)

 "dependencies": {
    "bootstrap": "^4.1.3",
    "express": "^4.16.4",
    "gql": "^1.1.2",
    "graphql": "^14.0.2",
    "js-cookie": "^2.2.0",
    "jwt-decode": "^2.2.0",
    "next": "^7.0.2",
    "next-apollo": "^2.0.7",
    "react": "^16.7.0",
    "react-apollo": "^2.3.3",
    "react-dom": "^16.7.0",
    "react-stripe-elements": "^2.0.1",
    "reactstrap": "^7.0.2",
    "recompose": "^0.30.0",
    "strapi-sdk-javascript": "^0.3.1"
  }

Обновление на основе вопросов

Код взят из этого (удивительного) урока [@ atav32] [https://blog.strapi.io/strapi-next-setup/] 1

Содержание компонентов / макет [@ atav32]

import React from "react";
import Head from "next/head";
import Link from "next/link";
import { unsetToken } from "../lib/auth";
import { Container, Nav, NavItem } from "reactstrap";
import defaultPage from "../hocs/defaultPage";
import Cookie from "js-cookie";

class Layout extends React.Component {
  constructor(props) {
    super(props);
  }
  static async getInitialProps({ req }) {
    let pageProps = {};
    if (Component.getInitialProps) {
      pageProps = await Component.getInitialProps(ctx);
    }

    return { pageProps, isAuthenticated };
  }
  render() {
    const { isAuthenticated, children } = this.props;
    const title = "Welcome to Nextjs";
    return (
      <div>
        <Head>
          <title>{title}</title>
          <meta charSet="utf-8" />
          <meta
            name="viewport"
            content="initial-scale=1.0, width=device-width"
          />
          <link
            rel="stylesheet"
            href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
            integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
            crossOrigin="anonymous"
          />
          <script src="https://js.stripe.com/v3" />
        </Head>
        <header>
          <Nav className="navbar navbar-dark bg-dark">
            <NavItem>
              <Link href="/">
                <a className="navbar-brand">Home</a>
              </Link>
            </NavItem>
            {isAuthenticated ? (
              <>
                <NavItem className="ml-auto">
                  <span style={{ color: "white", marginRight: 30 }}>
                    {this.props.loggedUser}
                  </span>
                </NavItem>
                <NavItem>
                  <Link href="/">
                    <a className="logout" onClick={unsetToken}>
                      Logout
                    </a>
                  </Link>
                </NavItem>
              </>
            ) : (
              <>
                <NavItem className="ml-auto">
                  <Link href="/signin">
                    <a className="nav-link">Sign In</a>
                  </Link>
                </NavItem>

                <NavItem>
                  <Link href="/signup">
                    <a className="nav-link"> Sign Up</a>
                  </Link>
                </NavItem>
              </>
            )}
          </Nav>
        </header>
        <Container>{children}</Container>
        {/* <footer className="footer">
          {"Strapi footer"}
          <style jsx>
            {`
              .footer {
                position: absolute;
                bottom: 0;
                width: 100%;
                height: 60px;
                line-height: 60px;
                background-color: #f5f5f5;
              }
              a:hover {
                cursor: pointer;
                color: yellow;
              }
            `}
          </style>
        </footer> */}
      </div>
    );
  }
}

export default defaultPage(Layout);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...