reactjs - 如何渲染相同的组件但具有初始状态(有条件地)?
问题描述
我有一个特定的组件,它使用useState
.
问题是我想有条件地渲染相同的组件:
const PaymentScannerView: React.FC<Props> = (props: React.PropsWithChildren<Props>) => {
const { t } = useTranslation();
return props.onFront ? (
<PBScanner
header={t('paymentScanner.front.capture.header')}
instruction={t('paymentScanner.front.capture.instruction')}
reCaptureText={t('paymentScanner.front.confirmation.reCaptureText')}
continueText={t('paymentScanner.front.confirmation.continueText')}
confirmCaptureHandler={props.confirmFrontCaptureHanlder}
reCaptureHandler={props.reCaptureFrontHandler}
/>
): (
<PBScanner
header={t('paymentScanner.back.capture.header')}
instruction={t('paymentScanner.back.capture.instruction')}
reCaptureText={t('paymentScanner.back.confirmation.reCaptureText')}
continueText={t('paymentScanner.back.confirmation.continueText')}
confirmCaptureHandler={props.confirmBackCaptureHandler}
reCaptureHandler={props.reCaptureBackHandler}
/>
);
};
但我不想在这两个“版本”之间分享这种状态。为了澄清这一点,假设该PBScanner
组件具有从 计数的内部状态0
。那么它是否在第一个条件内渲染了 5 次(意思props.onFront
是 5 次为真),然后,即使突然props.onFront
等于false
然后第二个版本将保留状态并使用等于 的计数器进行渲染5
。
那不是我想要的。我想“处理”这两个组件,因为它们不会共享状态。
我该怎么做?
解决方案
这取决于你真正想要什么。
如果状态应该在两个组件中单独维护,那么您应该同时渲染它们。然后组件本身应该决定它是否会返回任何东西。(根据@NicolasMenettrier 的建议)。
如果您希望它们在
props.onFront
更改时丢失其状态,那么最简单的解决方案是添加一个键属性。例如:<PBScanner key="front" .../> // and "back" respectively
这种方式 react 会将两者视为不同的,赋予它们自己的状态。
请注意,这将使它们在每次props.onFront
更改时都失去其状态。
推荐阅读
- html - CSS Grid:适合所有图像以覆盖相同的高度
- java - 启动时 Spring Boot UnsatisfiedDependencyException
- javascript - 反应原生 webview 域未定义代码 -2
- angular - 找不到名称'const'
- amazon-web-services - 我们如何获得cloudsearch中的项目总数?
- java - 尝试用 Java 制作初学者货币转换器并遇到问题
- archlinux - 删除除某些软件包外的软件包组
- c# - 在 WPF 中绘制站点平面图的最佳实践
- doxygen - Doxygen 无法使用 Graphviz 生成依赖图
- bash - 找不到 Bash 引号命令