ReactJS(如果道具存在)
ReactJS if prop exists
目前我在React中遇到了一个错误,因为我正在从REST端点映射一个对象数组,而数组中的一些对象没有特定的道具。
一个例子是,我的一些对象中有另一个名为images
的对象,而有些则没有。当我的React组件试图在没有images
的情况下渲染对象时,我会留下一个错误未定义的道具。
这是我的组件,渲染我的道具:
const VehicleDetail = (props) => {
return (
<div className={"col-flex-md-3 col-flex-sm-4 col-flex-xs-6 col-flex-media-query vehicle-item " + props.vehicle.brand.name} data-value={props.vehicle.brand.name}>
<div className="vehicle-container">
<img src={"https://s3-eu-west-1.amazonaws.com/pulman-vw-images/uploads/images/thumbnails/" + props.vehicle.offers[0].image.name} />
<h4 className="vehicle-title">
{props.vehicle.model.name}
</h4>
<div className="row-flex">
<div className="col-flex-xs-12 btn-container">
<a href={"http://beaver" + props.vehicle.brand.name + ".co.uk/new/cars/" + props.vehicle.slug} target="_blank" className="learn-more-btn">Learn More</a>
</div>
</div>
</div>
</div>
);
};
因此,正如您所看到的,我有一个道具为props.vehicle.offers[0].image.name
的img
元素,但这失败了,因为我的一些对象没有这个对象。
到目前为止,我已经尝试添加一个内联条件,只是想看看对象是否首先存在,但失败了,出现了一个错误:
<img src={"https://s3-eu-west-1.amazonaws.com/pulman-vw-images/uploads/images/thumbnails/" + {if (typeof props.vehicle.offers[0].image.name == "object") { props.vehicle.offers[0].image.name }}} />
这是我的组件,它迭代每个对象并将它们渲染到我的VehicleDetails组件:
// Vehicle List Component
import VehicleDetail from './vehicle-detail.js';
// Create our component
const VehicleList = (props) => {
// Just add props.vehicle to access API data instead of static
const RenderedVehicles = props.vehicles.map(vehicle =>
<VehicleDetail key={vehicle.slug} vehicle={vehicle} />
);
return (
<div className="row-flex center-xs">
{RenderedVehicles}
{console.log(props.brandSelect)}
</div>
);
};
你知道React JS的最佳实践是什么吗?感谢
在呈现之前检查报价的长度。
{props.vehicle.offers.length > 0 ? (
<img src={url + props.vehicle.offers[0].image.name} />
) : null}
我会这样做。在您的车辆组件中声明一个变量,该变量将保存缩略图url。
const VehicleDetail = (props) => {
let vehicleThumbnail = '';
if (props.vehicle.offers[0].image && props.vehicle.offers[0].image.name) {
vehicleThumbnail = props.vehicle.offers[0].image.name;
}
return (
<div className={"col-flex-md-3 col-flex-sm-4 col-flex-xs-6 col-flex-media-query vehicle-item " + props.vehicle.brand.name} data-value={props.vehicle.brand.name}>
<div className="vehicle-container">
<img src={vehicleThumbnail} />
<h4 className="vehicle-title">
{props.vehicle.model.name}
</h4>
<div className="row-flex">
<div className="col-flex-xs-12 btn-container">
<a href={"http://beaver" + props.vehicle.brand.name + ".co.uk/new/cars/" + props.vehicle.slug} target="_blank" className="learn-more-btn">Learn More</a>
</div>
</div>
</div>
</div>
);
};
其他道具我也会这么做。
props.vehicle.offers[0]
的正常情况可能如下所示:
{
image: {
name: 'hello'
}
}
因此,您可以使用props.vehicle.offers[0].image.name
而不会出现任何错误。
但有些情况是:
{
anotherProperty: {
}
}
props.vehicle.offers[0].image
是null
,所以props.vehicle.offers[0].image.name
等于null.name
,从而抛出错误。
解决这个问题的一个简单方法是这样的:
{ props.vehicle.offers[0].image && <img src={"https://s3-eu-west-1.amazonaws.com/pulman-vw-images/uploads/images/thumbnails/" + props.vehicle.offers[0].image.name} /> }
如果props.vehicle.offers[0].image
是null
,则不会执行&&
之后的语句,并且不返回任何要呈现的内容。
因此,它在props.vehicle.offers[0].image
不为空时渲染img
元素,防止了错误。
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 一个密码测试程序,如果存在空格,它会提醒用户
- javascript如果图像不存在don't加载它
- JavaScript-如果以前不存在文本,如何从文本区域删除新行
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 从一个数组中移除字符串(如果存在于另一个数组)
- underline-js:将键对象与数组键对象进行比较,如果存在,则移除现有的添加新的
- 如果存在特定类,请不要添加类
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 检查页面范围并提取<h1>内容(如果使用JQuery存在页面)
- 如果文件不存在,fs.watch是否有错误处理程序
- Shopify Liquid:如果存在价格比较,如何仅显示产品变体的价格比较
- 从params推送到对象(如果不存在)
- 如何从网站获得apple touch图标,如果没有;不存在,则显示收藏夹
- 如果 document.title 不存在,如何获取页面标题名称
- 基本 Jquery - 如果 TD 中存在文本,则使 DIV 可见
- 在Require.js中,如果Require()是一个函数,那么Require.config()是如何存在的
- 仅JavaScript-删除某些类(如果存在)
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- Javascript -检查键是否存在-如果不创建它,都在一行中