首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我看不见,但with'{this.props.promotions.filter(promotion=>promotion.featoured)[0]}'it一直说不能访问属性,这是错误的吗?

我看不见,但with'{this.props.promotions.filter(promotion=>promotion.featoured)[0]}'it一直说不能访问属性,这是错误的吗?
EN

Stack Overflow用户
提问于 2021-12-05 06:09:33
回答 1查看 25关注 0票数 0

我看不出来,但是promotion={this.props.promotions.filter(promotion=>promotion.featured)[0]}有什么问题吗?

我一直在犯这个错误,我很难搞清楚:

TypeError:无法访问属性“筛选器”,this.props.promotion未定义。它是针对我在props.its中过滤一个对象的,所以我认为从促销中获得的状态是发送的。

代码语言:javascript
运行
复制
    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));
EN

回答 1

Stack Overflow用户

发布于 2021-12-05 06:36:10

如果道具在初始渲染中没有promotions,则可能发生这种情况。进行如下验证。如果需要,对campsitepartners进行类似的验证。

代码语言:javascript
运行
复制
<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]
  }
/>;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70231899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档