@lexstile

Почему компонент unknown?

5d42df4384e65491911963.png
App:
export const App = () => {
  const [layout, handleChangeLayout] = useState(LayoutType.DESKTOP);

  return (
    <React.Fragment>
      <Header>
        {PAGE_TITLE}
      </Header>
      <SwitchLayout
        layout={layout}
        onChangeLayout={handleChangeLayout}
      />
      <MovieList
        layout={layout}
      />
    </React.Fragment>
  );
};

MovieList:
export const MovieList = connect(
  createStructuredSelector({
    movies: getMoviesSelector,
    recommendations: getRecommendationsSelector,
  }),
  { getData: requestData },
)(({
  movies,
  recommendations,
  layout,
  getData,
} : MovieListPropsType) => {
  useEffect(() => {
    getData();
  }, []);

  return (
    <div className="container">
      <div className="row">
        {movies && movies.map((movie, index) => (
          <Movie
            key={movie.id}
            even={(index + 1) % 2 === 0}
            layout={layout}
            movie={movie}
            recommendation={find(recommendations, { movieId: movie.id })}
          />
        ))}
      </div>
    </div>
  );
});

Почему компонент-обертка unknown? (Так и должно быть или я где-то что-то упустил? Что именно?)
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Суть проблемы в том, что у анонимной функции пустое свойство name.
React использует либо заданное свойство displayName, либо собственное свойство функции name. Ни одно из свойств не найдено и вы видите Unknown
connect в свою очередь, если при создании обертки не находит одно из этих свойств использует слово Component, которое вы и видите в скобках.

По-хорошему, компоненты описывают так:
const MovieList: React.FC<MovieListPropsType> = ({ ... }) => { ... };

const mapStateToProps = createStructuredSelector({ ... });

const mapDispatchToProps = { ... };

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


P.S. у вас ошибка в слове Desktop.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега React
const MovieList = ...

MovieList.displayName = 'MovieList';

export MovieList;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы