REACT: Вы, вероятно, забыли экспортировать свой компонент из файла, в котором он определен, или вы, возможно, перепутали импорт по умолчанию и именованный импорт

#javascript #reactjs

#javascript #reactjs

Вопрос:

Это все сообщение об ошибке, которое я получаю, когда нажимаю на div (тот, у которого className =»hotel-row»)

index.js: 1 Предупреждение: React.createElement: недопустимый тип — ожидалась строка (для встроенных компонентов) или класс / функция (для составных компонентов), но получено: undefined. Вы, вероятно, забыли экспортировать свой компонент из файла, в котором он определен, или вы, возможно, перепутали импорт по умолчанию и именованный импорт.

Проверьте свой код на HotelList.js:27.

Этот компонент подключен к redux

 const mapStateToProps = (state) => state;

function mapDispatchToProps(dispatch) {
  return {
    loadHotels: async () => {
      dispatch(loadHotels());
    },
  };
}

function HotelList(props) {
  useEffect(() => {
    props.loadHotels();
  }, []);

  if (props.hotels.length != undefined) {
    const data = props.hotels;
    const listItems = data.map((d) => (
      <div className="hotel-row" onClick={() => <Redirect to={"/hotel/" d.name} />}>
        <Hotel name={d.name} category={d.category} image={d.image} description={d.description} />
      </div>
    ));

    return <div className="hotel-list">{listItems}</div>;
  }
  return (
    <div>
      <p>Loading...</p>
    </div>
  );
}

export default connect(mapStateToProps, mapDispatchToProps)(HotelList);
  

Вот как выглядит мой маршрутизатор

 import * as React from "react";
import { Route, Switch, withRouter, Redirect } from "react-router-dom";
import HotelList from "../Components/HotelList";
import HotelPage from "../Components/HotelPage"
const Router = () => {
    const renderFor404Routes = () => <Redirect to="/" />;
    return (
      <div>
        <Switch>
          <Route exactly component={HotelList} exact path="/" />
          <Route exact path="/hotel/:name" component={HotelPage}  />
          <Route path="/" exactly component={renderFor404Routes} />
        </Switch>
      </div>
    );
  };
  
  export default withRouter(Router);
  

И именно сюда он должен перенаправляться

 import React, { useEffect } from "react";
import { useParams } from "react-router-dom";
const HotelPage = () => {

  let { name } = useParams();


  useEffect(() => {
       
  }, [])

  return (
    <div>
      {name}
    </div>
  );
};

export default HotelPage
  

Ответ №1:

Исправлено таким образом

 <div className="hotel-row" onClick={() => props.history.push("/hotel/" d.name)}>
        <Hotel name={d.name} category={d.category} image={d.image} description={d.description} />
      </div>