я не могу этого видеть, но что-то не так с'{this.props.promotions.filter(продвижение=>продвижение.featured)[0]}’он продолжает говорить, что не может получить доступ к свойству

#reactjs

#реагирует на

Вопрос:

Я действительно не вижу этого, но что-то не так с promotion={this.props.promotions.filter(promotion=gt;promotion.featured)[0]}

Я продолжаю получать эту ошибку, и мне трудно понять это:

Ошибка типа: не удается получить доступ к свойству «фильтр», это.props.продвижение не определено. это связано с тем, что я фильтрую объект в реквизитах.поэтому, я думаю, отправляется состояние из рекламных акций

 import React, { Component } from 'react'; import Home from './HomeComponent'; import { Switch, Route, Redirect, withRouter } from 'react-router-dom'; import { connect } from 'react-redux'; import Directory from './DirectoryComponent'; import CampsiteInfo from './CampsiteInfoComponent'; import Header from './HeaderComponent'; import Footer from './FooterComponent'; import Contact from './ContactComponent'; import About from './AboutComponent'; import { addComment } from '../redux/ActionCreators';   const mapStateToProps = state =gt; {  return {  campsites: state.campsites,  comments: state.comments,  partners: state.partners,  promotion: state.promotion  } }  const mapDispatchToProps = {  addComment: (campsiteId, rating, author, text) =gt; (addComment(campsiteId, rating, author, text)) }; class Main extends Component {    render() {  const HomePage = () =gt; {  return (  lt;Home  campsite={this.props.campsites.campsites.filter(campsite=gt;campsite.featured)[0]}    promotion={this.props.promotions.promotions.filter(promotions=gt;promotions.featured)[0]}  partner={this.props.partners.partners.filter(partners=gt; partners.featured)[0]}  /gt;  );  };  const CampsiteWithId = ({match}) =gt; {  return (  lt;CampsiteInfo   campsite={this.props.campsites.filter(campsite=gt; campsite.id ===  match.params.campsiteId)[0]}  comments={this.props.comments.filter(comment =gt; comment.campsiteId ===  match.params.campsiteId)}  addComment={this.props.addComment}  /gt;  );  };   return (  lt;divgt;  lt;Header /gt;  lt;Switchgt;  lt;Route path='/home' component={HomePage} /gt;  lt;Route exact path='/directory' render={()=gt; lt;Directory campsites={this.props.campsites} /gt;} /gt;  lt;Route path='/directory/:campsiteId' component={CampsiteWithId} /gt;  lt;Route exact path='/contactus' component={Contact} /gt;  lt;Route exact path='/aboutus' render={()=gt; lt;About partners={this.props.partners} /gt;} /gt;  lt;Redirect to='/home' /gt;  lt;/Switchgt;  lt;Footer /gt;  lt;/divgt;  );  } } export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Main));  

Комментарии:

1. я использовал ‘promotion={это.реквизит.акции.акции.фильтр(акции=gt;акции. показанный)[0]}’ и возникает та же ошибка

2. Ошибка «Ошибка типа: не удается получить доступ к свойству «фильтр», этот.props.promotion не определен» означает, что this.props.promotion он не определен. Убедитесь, что он на самом деле задается тем, что его визуализирует.

3. так что, как nconsole.log(Main.promotions);

4. он думает, что это делает его ReactDOM.render( lt;React.StrictModegt; lt;App /gt; lt;/React.StrictModegt;, document.getElementById('root') );

5. можете ли вы добавить больше кода

Ответ №1:

Это может произойти, если promotions в исходном рендеринге нет реквизита. Сделайте некоторую проверку, как показано ниже. Выполните аналогичные проверки для campsite и partners при необходимости.

 lt;Home  campsite={  this.props.campsites.campsites.filter((campsite) =gt; campsite.featured)[0]  }  promotion={  this.props.promotions amp;amp;  Array.isArray(this.props.promotions.promotions) amp;amp;  this.props.promotions.promotions.length  ? this.props.promotions.promotions.filter(  (promotions) =gt; promotions.featured  )[0]  : ""  }  partner={  this.props.partners.partners.filter((partners) =gt; partners.featured)[0]  } /gt;;  

Комментарии:

1. что такое array.isarrat, я думал, вам это не нужно, если вы просто передаете состояние акции в магазин

2. Array.isArray заключается в том, чтобы проверить, является ли ваша переменная массивом. filter может быть применен только к массиву.

3. o я думал, что когда вы что-то отфильтровываете, это создает массив

4. я тоже делаю это для кемпингов и партнеров, так как эти линии делают то же самое

5. Да, добавьте его и проверьте