#javascript #node.js #reactjs
Вопрос:
это код в react js, и когда я пытаюсь запустить его, он выдает ошибку
Ошибка: Недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс/функция (для составных компонентов), но получено: не определено. Скорее всего, вы забыли экспортировать свой компонент из файла, в котором он определен, или вы, возможно, перепутали импорт по умолчанию и именованный импорт.
особенно это касается отображения этой строки в коде
смотрите изображение для поиска ошибок
import React, { Component } from "react"; import NewsItem from "./NewsItem"; import "../App.css"; import Spinner from "./Spinner"; import PropTypes from "prop-types"; export default class News extends Component { static defaultProps = { country: "in", category: "general", }; static propTypes = { country: PropTypes.string, category: PropTypes.string, }; capitalizeFirstLetter = (string) =gt; { return string.charAt(0).toUpperCase() string.slice(1); }; constructor(props) { super(props); console.log("this is the constructor from news component"); this.state = { articles: [], loading: false, page: 1, }; document.title = this.capitalizeFirstLetter(this.props.category) "-StarNews"; } handlePrevClick = async () =gt; { let url = `https://newsapi.org/v2/top-headlines?country=${ this.props.country }amp;category=${ this.props.category }amp;apiKey=561578a70b89478abce79fddfeae432bamp;page=${ this.state.page - 1 }amp;pageSize=15`; this.setState({ loading: true }); let data = await fetch(url); let parseData = await data.json(); this.setState({ page: this.state.page - 1, articles: parseData.articles, loading: false, }); }; handleNextClick = async () =gt; { if (this.state.page 1 gt; Math.ceil(this.state.totalResults / 20)) { } else { let url = `https://newsapi.org/v2/top-headlines?country=${ this.props.country }amp;category=${ this.props.category }amp;apiKey=561578a70b89478abce79fddfeae432bamp;page=${ this.state.page 1 }amp;pageSize=15`; this.setState({ loading: true }); let data = await fetch(url); let parseData = await data.json(); this.setState({ page: this.state.page 1, articles: parseData.articles, loading: false, }); } }; async componentDidMount() { let url = `https://newsapi.org/v2/top-headlines?country=${this.props.country}amp;category=${this.props.category}amp;apiKey=561578a70b89478abce79fddfeae432bamp;page=1amp;pageSize=15`; this.setState({ loading: true }); let data = await fetch(url); let parseData = await data.json(); this.setState({ articles: parseData.articles, loading: false, author: parseData.author, published: parseData.publishedAt, }); } render() { return ( lt;div className="container my-3"gt; lt;h1 className="text-center morn"gt;StarNews-Top Headlineslt;/h1gt; {this.state.loading amp;amp; lt;Spinner /gt;} lt;div className="row"gt; {!this.state.loading amp;amp; this.state.articles.map((elements) =gt; { return ( lt;div className="col-md-4" key={elements.url}gt; lt;NewsItem source={elements.source.name} author={elements.author} time={elements.published} title={elements.title} description={elements.description} imageurl={elements.urlToImage} newsurl={elements.url} /gt; lt;/divgt; ); })} lt;/divgt; lt;div className="container d-flex justify-content-between"gt; lt;button disabled={this.state.page lt;= 1} type="button" className="btn btn-danger" onClick={this.handlePrevClick} gt; amp;larr; previous lt;/buttongt; lt;button disabled={ this.state.page 1 gt; Math.ceil(this.state.totalResults / 20) } type="button" className="btn btn-danger" onClick={this.handleNextClick} gt; next amp;rarr; lt;/buttongt; lt;/divgt; lt;/divgt; ); } }
Ответ №1:
Ошибка, которую вы получаете, связана с тем, как вы импортируете/экспортируете компоненты в своем проекте. Один из этих (или оба) двух компонентов: NewsItem
amp; Spinner
импортированы неправильно.
Существует два способа экспорта: по умолчанию или нет. Экспортированный компонент по умолчанию импортируется как: import Spinner from "./Spinner";
, а обычный экспортируемый компонент-как: import { NewsItem } from "./NewsItem";
.
Поэтому проверьте оба экспорта этих компонентов, чтобы выяснить, откуда взялась ошибка.
Удачи!
Комментарии:
1. я экспортировал по умолчанию, хотя получаю сообщение об ошибке
2. я экспортировал по умолчанию не только этот каждый компонент, который я экспортировал по умолчанию, даже несмотря на то, что я получаю ошибку, смотрите фотографию, которую я прикрепил
3. Затем вы должны импортировать элемент новостей следующим образом:
import NewsItem from "./NewsItem";
4. Пожалуйста, дайте мне знать, помог ли вам мой ответ
5. да, я тоже это пробовал