Попытка внедрить реагирующую группу перехода в реагирующий маршрутизатор приводит к ошибке: «Тип элемента недействителен ...» - PullRequest
2 голосов
/ 17 января 2020

Я пытаюсь использовать компонент CSSTransition из модуля реагировать на переходную группу для реализации переходов страниц, когда пользователь переключается с одного маршрута на другой. Из моего кода, проверенного ниже, он генерирует следующую ошибку:

Недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс / функция (для составных компонентов), но получено: undefined , Вы, вероятно, забыли экспортировать свой компонент из файла, в котором он определен, или вы перепутали импорт по умолчанию и имя

Вот мой пример кода:

import React from 'react';
import { BrowserRouter as Router, Route, Switch,  useParams, useLocation } from 'react-router-dom';
import Home from './Home';
import Login from './Login';
import SignUp from './SignUp';
import ManagerSignUp from './ManagerSignUp';
import ManagerLogin from './ManagerLogin';
import CreateEvent from './CreateEvent';
import RegisterVenue from './RegisterVenue';
import Dashboard from './Dashboard';
import ManagerDashboard from './ManagerDashboard';
import EventPage from './EventPage';
import './assets/pageTransitions.css'
import {
  TransitionGroup,
  CSSTransition
} from "react-transition-group";

const routes = [
  {path: '/', name: 'Home', Component: Home },
  {path: '/login', name: 'Login', Component: Login },
  {path: '/signup', name: 'Signup', Component: SignUp },
  {path: '/manager_signup', name: 'Manager Signup', Component: ManagerSignUp },
  {path: '/manager_login', name: 'Manager Login', Component: ManagerLogin },
  {path: '/eventcreate', name: 'Event Create', Component: CreateEvent },
  {path: '/registervenue', name: 'Register Venue', Component: RegisterVenue },
  {path: '/dashboard', name: 'Dashboard', Component: Dashboard },
  {path: '/manager_dashboard', name: 'Manager Dashboard', Component: ManagerDashboard },
  {path: '/event/:uid', name: 'Event Page', Component: EventPage },
]


export default function App() {
  // let {location} = window.location.origin
  return (
    <React.Fragment>
      <Router>
        <Switch>
          <Route>
            {routes.map(({ path, Component }) => (
              <Route key={path} exact path={path}>
                {({match}) => (
                  <CSSTransition
                    in={match != null}
                    timeout={300}
                    classNames="page"
                    unmountOnExit
                  >
                    <Component />
                  </CSSTransition>
                )}
              </Route>
            ))}
          </Route>
        </Switch>
      </Router>
    </React.Fragment>
  );
}

Я не могу определить природу этой ошибки после нескольких перекрестных проверок. Мне нужна помощь, чтобы определить, почему это происходит и как это исправить, пожалуйста.

1 Ответ

1 голос
/ 17 января 2020

Я обнаружил некоторые ошибки здесь, замените ваш код коммутатора на этот

вы не передаете здесь компонент, и вы помещаете свой весь маршрут в тег, который является неправильным

    <Switch>

        {routes.map(({ path, Component }) => (
          <Route key={path} exact path={path} component={Component} >
          </Route>
        ))}

    </Switch>

Для CSSTransition Вы можете создать один HO C (компонент высшего порядка) и использовать его со всеми вашими компонентами, такими как component={HOC(Component)}

HO C:

import React , {useState,useEffect} from 'react';
import {
  TransitionGroup,
  CSSTransition
} from "react-transition-group";

export default (ComposedComponent) => {
  return (props) =>{  

  /* HOC : component is like write once and use any where.
    You can pass your any component it will return with your CSSTransition 
    for that component  */

    retun (
            <ComposedComponent {...props}>  
            {({match}) => (
              <CSSTransition
                in={match != null}
                timeout={300}
                classNames="page"
                unmountOnExit
              >
                 {props.children}
              </CSSTransition>
            )}                  
            </ComposedComponent>
    )
  };
};

Последний шаг - импорт вашего HO C в свой файл и передайте ему свой компонент как

   import HOC from 'path of HOC'

  <Route key={path} exact path={path} component={HOC(Component)} >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...