3 回答

TA贡献1821条经验 获得超6个赞
你可以做更多的速记
{amenities &&
Object.keys(amenities)
.filter((key) => amenities[key])
.map((key) => {
if (key === "tv") {
return (
<p>
<i class="fa fa-tv"></i> {key}
</p>
);
} else if (key === "reservation") {
return (
<p>
<i class="fa fa-reservation"></i> {key}
</p>
);
} else if (key === "cabin") {
return (
<p>
<i class="fa fa-cabin"></i> {key}
</p>
);
} else if (key === "services") {
return (
<p>
<i class="fa fa-service"></i> {key}
</p>
);
}
})}
为什么以及如何:
基本上,如果您只需要测试您的键是否 === 'something' 并检查该值是真还是假,您可以这样做:
首先过滤对象,使其只保留真值。然后在你的 .map() 上你会知道你得到了真实的键,所以你只需要根据键值处理条件渲染
.filter((key) => amenities[key]) // will filter out every values not truthy
myCurrentKey: '' // 会被过滤掉
myCurrentKey: 1 // 不会被过滤掉
另外,对于我的观点,当你有你想要渲染的对象时,尝试首先使用 Object.keys().map(),这是简单的方法和更易读的方法,除非你需要真正定制的东西,您可以使用 Object.entries,否则。

TA贡献1802条经验 获得超5个赞
可以这样做:
const { amenities = {} } = resort;
return (
<div>
{Object.keys(amenities).map(item => {
return amenities[item] ? <p><i class={`fa fa-${item}`}></i>{item}</p> : null;
})}
</div>
)
但我认为这里并不真正需要映射,你可以保持简单:
const { amenities = {} } = resort;
return (
<div>
{amenities.tv && <p><i class="fa fa-tv"></i>tv</p>}
{amenities.reservation && <p><i class="fa fa-reservation"></i>reservation</p>}
{amenities.cabin && <p><i class="fa fa-cabin"></i>cabin</p>}
{amenities.services && <p><i class="fa fa-service"></i>services</p>}
</div>
)

TA贡献1798条经验 获得超7个赞
尝试这个:
amenities && Object.entries(amenities).filter(([key,value]) => value === true).map(
([key]) => {
switch(key){
case 'tv':
return <p><i class="fa fa-tv"></i> {key}</p>;
case 'reservation':
return <p><i class="fa fa-reservation"></i> {key}</p>;
case 'cabin':
return <p><i class="fa fa-cabin"></i> {key}</p>;
case 'services':
return <p><i class="fa fa-services"></i> {key}</p>;
default:
return null;
}
})
我认为你的问题是你使用key[value]whenkey是一个字符串并且value是一个布尔值
添加回答
举报