我看不出来,但是promotion={this.props.promotions.filter(promotion=>promotion.featured)[0]}
有什么问题吗?
我一直在犯这个错误,我很难搞清楚:
TypeError:无法访问属性“筛选器”,this.props.promotion未定义。它是针对我在props.its中过滤一个对象的,所以我认为从促销中获得的状态是发送的。
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 => {
return {
campsites: state.campsites,
comments: state.comments,
partners: state.partners,
promotion: state.promotion
}
}
const mapDispatchToProps = {
addComment: (campsiteId, rating, author, text) => (addComment(campsiteId, rating, author, text))
};
class Main extends Component {
render() {
const HomePage = () => {
return (
<Home
campsite={this.props.campsites.campsites.filter(campsite=>campsite.featured)[0]}
promotion={this.props.promotions.promotions.filter(promotions=>promotions.featured)[0]}
partner={this.props.partners.partners.filter(partners=> partners.featured)[0]}
/>
);
};
const CampsiteWithId = ({match}) => {
return (
<CampsiteInfo
campsite={this.props.campsites.filter(campsite=> campsite.id === +match.params.campsiteId)[0]}
comments={this.props.comments.filter(comment => comment.campsiteId === +match.params.campsiteId)}
addComment={this.props.addComment}
/>
);
};
return (
<div>
<Header />
<Switch>
<Route path='/home' component={HomePage} />
<Route exact path='/directory' render={()=> <Directory campsites={this.props.campsites} />} />
<Route path='/directory/:campsiteId' component={CampsiteWithId} />
<Route exact path='/contactus' component={Contact} />
<Route exact path='/aboutus' render={()=> <About partners={this.props.partners} />} />
<Redirect to='/home' />
</Switch>
<Footer />
</div>
);
}
}
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Main));
发布于 2021-12-05 06:36:10
如果道具在初始渲染中没有promotions
,则可能发生这种情况。进行如下验证。如果需要,对campsite
和partners
进行类似的验证。
<Home
campsite={
this.props.campsites.campsites.filter((campsite) => campsite.featured)[0]
}
promotion={
this.props.promotions &&
Array.isArray(this.props.promotions.promotions) &&
this.props.promotions.promotions.length
? this.props.promotions.promotions.filter(
(promotions) => promotions.featured
)[0]
: ""
}
partner={
this.props.partners.partners.filter((partners) => partners.featured)[0]
}
/>;
https://stackoverflow.com/questions/70231899
复制相似问题