【发布时间】:2023-03-28 06:18:01
【问题描述】:
我有 2 个组件使用从 json 服务器获取的相同数据。
一个组件使用的数据如下所示:
function Home(props) {
return (
<div className='container'>
<div className='row align-items-start'>
<div className='col-12 col-md m-1'>
<RenderCard item={props.dish}
isLoading={props.dishesLoading}
errMess={props.dishErrMess} />
</div>
<div className='col-12 col-md m-1'>
<RenderCard item={props.promotion}
isLoading={props.promoLoading}
errMess={props.promoErrMess} />
</div>
<div className='col-12 col-md m-1'>
<RenderCard item={props.leader}
isLoading={props.leaderLoading}
errMess={props.leaderErrMess} />
</div>
</div>
</div>
);}
其他组件使用数据如下:
const leaders = props.leaders.map((leader) => {
return (
<RenderLeader leader={leader} isLoading={props.isLoading}
errMess={props.errMess} />
);
});
RenderLeader 和 RenderCard 组件都具有类似的结构,带有一个 if-else 循环来显示加载动画或错误消息以及实际内容。
function RenderLeader({ leader, isLoading, errMess }) {
if (isLoading) {
return (
<Loading />
);
}
else if (errMess) {
return (
<h4>{errMess}</h4>
);
}
else
return (CONTENT)
问题是 Home 组件显示加载动画和错误消息,但结构完全相同的其他组件却没有显示。此外,实际上是为第二个组件获取数据,只是它不会显示加载动画和错误消息。这有什么问题?
编辑
这就是我调用它们的方式:
<Home
dish={this.props.dishes.dishes.filter((dish) => dish.featured)[0]}
dishesLoading={this.props.dishes.isLoading}
dishErrMess={this.props.dishes.errMess}
promotion={this.props.promotions.promotions.filter((promo) => promo.featured)[0]}
promoLoading={this.props.promotions.isLoading}
promoErrMess={this.props.promotions.errMess}
leader={this.props.leaders.leaders.filter((leader) => leader.featured)[0]}
leaderLoading={this.props.leaders.isLoading}
leaderErrMess={this.props.leaders.errMess}
/>
<Route path='/aboutus' component={() => <About leaders={this.props.leaders.leaders}
isLoading={this.props.leaders.isLoading}
errMess={this.props.leaders.errMess} />} />
【问题讨论】:
-
我已经确保所有的道具都正确匹配。
-
如果你不链接它,我们很难告诉你另一个组件有什么问题:) 如果它们完全相同,那么一定有一个道具差异 - 你没有显示我们如何调用
Home(或其他组件)
标签: reactjs redux react-props conditional-rendering