[英]using If/Else statement in ReactJs to return a component
这是courseButton.jsx :
import React from "react";
import styles from "./styles.module.scss";
import { MenuFoldOutlined, MenuUnfoldOutlined } from "@ant-design/icons";
export default (props) => {
const { collapsed, onClick } = props;
return <>{collapsed ? MenuUnfoldOutlined : MenuFoldOutlined}</>;
};
我的两个组件都有相同的道具。 所以我想避免这样的编码:
import React from "react";
import styles from "./styles.module.scss";
import { MenuFoldOutlined, MenuUnfoldOutlined } from "@ant-design/icons";
export default (props) => {
const { collapsed, onClick } = props;
return (
<>
{collapsed ? (
<MenuUnfoldOutlined className={styles.trigger} onClick={onClick} />
) : (
<MenuFoldOutlined className={styles.trigger} onClick={onClick} />
)}
</>
);
};
那么我如何在一行代码中为选定的组件提供样式。
我想要这样的代码。
这个解决方案可以更好地扩展,因为我们只分配一次道具。
export default (props) => {
const { collapsed, onClick } = props;
const Component = collapsed ? MenuUnfoldOutlined : MenuFoldOutlined;
return <Component className={styles.trigger} onClick={onClick} />;
};
如果我对您的理解正确,您希望保持代码DRY 。 您可以将道具存储在变量中以使其可重用。
export default (props) => {
const {collapsed, onClick} = props;
const genericProps = {
className: styles.trigger,
onClick,
}
if (collapsed) {
return <MenuUnfoldOutlined {...genericProps} />
}
return <MenuFoldOutlined {...genericProps} />
}
注意:React Fragment 是多余的。
你可以简单地这样写:
import React from "react"
import styles from "./styles.module.scss"
import {MenuFoldOutlined, MenuUnfoldOutlined} from '@ant-design/icons'
export default (props) => {
const {collapsed, onClick} = props
return (
<>
{collapsed ? <MenuUnfoldOutlined {...props} /> : <MenuFoldOutlined {...props}/>}
</>
)
}
这和写作是一样的。 如果包装组件有一堆道具,而您只需要特定的道具,您可以尝试以下方法:
export default (props) => { // 如果 props 有一堆 props 但我们只需要折叠和 // onClick: const {collapsed, onClick} = props const menuProps = {collapsed, onClick}
return ( <> {collapsed? <MenuUnfoldOutlined {...menuProps} />: <MenuFoldOutlined {...menuProps}/>} </> ) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.