#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. Да, добавьте его и проверьте