css - 如何使用反应重构开关盒的代码?
问题描述
我有一个侧面板,里面有一些列表项。我正在使用 switch case 来返回列表项。我没有为列表项重复代码,而是创建了一个 listitem 组件并将图标和时间戳传递给它,还可以在 listitem 组件中呈现子项。
下面是代码,
switch(item.type) {
case 'uploaded':
return (
<ListItem icon={<Svg/>} text={name +
'created item' + item.name} timestamp={timestamp}>
<div className="image">
<Image
width={70}
height={70}
item_id={item.id}
/>
</div>
</ListItem>
);
case 'deleted':
return (
<ListItem icon={<Svg/>} text={name +
'deleted item' + item.name} timestamp={timestamp}>
</ListItem>
);
function ListItem(props) {
return (
<li className="item">
<div className="details">
{props.icon}
<span>{props.text}</span>
</div>
{props.children}
<Timestamp>{props.timestamp}</Timestamp>
</li>
);
}
上面的代码有效..
但我想要一种更简洁的方法来做到这一点。而不是将文本作为道具传递给 ListItem 有没有办法 ai 可以将它包含在 props.children 中并在 Listitem 中使用它。它会在带有详细信息类名的 div 之后添加…我希望它与详细信息 div 和带有类名详细信息的 div 之后的图像..
我该怎么做。谢谢。
解决方案
您可以在传递您的类型的新组件中移动所有内容:
function InnerItem(props) {
switch(props.type) {
case 'uploaded':
return (
<ListItem icon={<Svg/>} text={name +
'created item' + item.name} timestamp={timestamp}>
<div className="image">
<Image
width={70}
height={70}
item_id={item.id}
/>
</div>
</ListItem>
);
case 'deleted':
return (
<ListItem icon={<Svg/>} text={name +
'deleted item' + item.name} timestamp={timestamp}>
</ListItem>
);
}
function ListItem(props) {
return (
<li className="item">
<div className="details">
{props.icon}
<span>{props.text}</span>
</div>
<InnerItem {...item}/>
<Timestamp>{props.timestamp}</Timestamp>
</li>
);
}
推荐阅读
- angular - Angular 6 和 .NET Core 2.1;浏览器不会跨端口共享 cookie
- ios - 如何在 TableView Cell 中停止重复图像
- docker - 如何在 jenkins ssh-slave 节点上运行的声明性管道中使用代理 docker?
- python - 防止将更改应用于原始数据框的好方法是什么?
- eggplant - 茄子:如何阅读带有 ' _ 等特殊字符的文本
- arrays - Hive:如何在数组类型的列中插入数据
- regex - Perl, Change the Case of Letter at { character
- react-native - Undefined 不是 reactnative 中的对象(评估 this.props.navigation.navigate)
- mysql - 提取具有特定模式的子字符串
- google-analytics - 如何让 GTM 的内置 YouTube 触发器触发通过 JS 单击功能创建的模态播放的视频