ReactJs:我怎样才能简化这个组件,这样我就不必渲染我的 Modal 和 window 组件两次?
ReactJs: How can I simplify this component so that I do not have to render my Modal and window component twice?
我想简化我的组件,因为我要返回我的 Modal、Window 组件和两个 div 两次,我想渲染它们一次并且只交替显示标题、barContainer 和 storageText divs 当模式道具改变时。
如果 modalMode 改变,它内部唯一改变的是这部分:
(这个 div 里面是什么。)
<div className={styles.title}></div>
<div className={styles.barContainer}>
<span className={styles.storageText}>
</div>
其余的(Modal、Window、menuButton 和副标题div)始终保持不变。
这是我的组件:
const modalMode: StorageWarningModalTypes = "STORAGE_LIMIT_EXCEEDED";
type Props = {
storageUsed: number;
storageAvailable: number;
fileSize: number;
mode: string;
percentageUsed: number;
disableProButton: boolean;
onClose: Function;
};
const StorageModals = ({
storageUsed,
storageAvailable,
fileSize,
mode,
percentageUsed,
disableProButton,
onClose,
}: Props) => {
if (!storageUsed || storageUsed < 0) storageUsed = 0;
if (!storageAvailable || storageAvailable < 0) storageAvailable = 0;
if (mode === modalMode) {
return (
<div>
<Modal className={styles.container} onClickOutside={onClose}>
<Window
title={" "}
maxHeight={MODAL_MAX_HEIGHT}
className={styles.storageModal}
showCloseButton={true}
onClose={onClose}
>
<div className={styles.cardContainer}>
**<div className={styles.title}></div>
<div className={styles.barContainer}>
<span className={styles.storageText}>
</div>**
---> this part stays the same:
<div className={styles.subtitle}></div>
<MenuButton></MenuButton>
</div>
</Window>
</Modal>
</div>
);
} else
return (
<div>
<Modal className={styles.container} onClickOutside={onClose}>
<Window
title={" "}
maxHeight={MODAL_MAX_HEIGHT}
className={styles.storageModal}
showCloseButton={true}
onClose={onClose}
>
<div className={styles.cardContainer}>
**<div className={styles.title}></div>
<div className={styles.barContainer}>
<span className={styles.storageText}>
</div>**
<div className={styles.subtitle}></div>
<MenuButton></MenuButton>
</div>
</Window>
</Modal>
</div>
);
};
export default StorageModals;
您可以删除条件 return
,如果您要更改的是类名,则使用条件类名:
<div className={mode === modalMode ? styles.title : 'your other classname'}></div>
<div className={mode === modalMode ? styles.barContainer : 'your other classname'}>
<span className={mode === modalMode ? styles.storageText : }>
</div>
或者,如果您要更改 div 中的内容,您也可以使用 ternary 有条件地呈现内容:
<div>{condition ? 'some content' : 'other content'}</div>
我想简化我的组件,因为我要返回我的 Modal、Window 组件和两个 div 两次,我想渲染它们一次并且只交替显示标题、barContainer 和 storageText divs 当模式道具改变时。
如果 modalMode 改变,它内部唯一改变的是这部分:
(这个 div 里面是什么。)
<div className={styles.title}></div>
<div className={styles.barContainer}>
<span className={styles.storageText}>
</div>
其余的(Modal、Window、menuButton 和副标题div)始终保持不变。
这是我的组件:
const modalMode: StorageWarningModalTypes = "STORAGE_LIMIT_EXCEEDED";
type Props = {
storageUsed: number;
storageAvailable: number;
fileSize: number;
mode: string;
percentageUsed: number;
disableProButton: boolean;
onClose: Function;
};
const StorageModals = ({
storageUsed,
storageAvailable,
fileSize,
mode,
percentageUsed,
disableProButton,
onClose,
}: Props) => {
if (!storageUsed || storageUsed < 0) storageUsed = 0;
if (!storageAvailable || storageAvailable < 0) storageAvailable = 0;
if (mode === modalMode) {
return (
<div>
<Modal className={styles.container} onClickOutside={onClose}>
<Window
title={" "}
maxHeight={MODAL_MAX_HEIGHT}
className={styles.storageModal}
showCloseButton={true}
onClose={onClose}
>
<div className={styles.cardContainer}>
**<div className={styles.title}></div>
<div className={styles.barContainer}>
<span className={styles.storageText}>
</div>**
---> this part stays the same:
<div className={styles.subtitle}></div>
<MenuButton></MenuButton>
</div>
</Window>
</Modal>
</div>
);
} else
return (
<div>
<Modal className={styles.container} onClickOutside={onClose}>
<Window
title={" "}
maxHeight={MODAL_MAX_HEIGHT}
className={styles.storageModal}
showCloseButton={true}
onClose={onClose}
>
<div className={styles.cardContainer}>
**<div className={styles.title}></div>
<div className={styles.barContainer}>
<span className={styles.storageText}>
</div>**
<div className={styles.subtitle}></div>
<MenuButton></MenuButton>
</div>
</Window>
</Modal>
</div>
);
};
export default StorageModals;
您可以删除条件 return
,如果您要更改的是类名,则使用条件类名:
<div className={mode === modalMode ? styles.title : 'your other classname'}></div>
<div className={mode === modalMode ? styles.barContainer : 'your other classname'}>
<span className={mode === modalMode ? styles.storageText : }>
</div>
或者,如果您要更改 div 中的内容,您也可以使用 ternary 有条件地呈现内容:
<div>{condition ? 'some content' : 'other content'}</div>