这里我有这个复选框出现在“率”字段内,当投标处于草案或待定状态时,这个复选框应该出现,当它不是,它应该消失。由于某种原因,我不能弄清楚如何构造这个条件逻辑,它只采取在第二个参数,所以当项目处于“草案”状态时,复选框不显示。我在这里做错了什么:
<HrCurrencyInput
name='Rate'
label='Rate'
width={width.medium}
onChange={handleChange}
value={formik.values.OverrideRate ? formik.values.Rate : selectedBillable?.Cost ?? ''}
errors={formik.errors.Rate}
InputProps={{
endAdornment:
(
status === "Draft" || status === "Pending" &&
(
<InputAdornment position="end">
<HrCheckBox
name="OverrideRate"
checked={formik.values.OverrideRate}
onChange={handleOverrideChange}
sx={{
m: "0 -8px 0 0",
"& .MuiCheckbox-root": {
p: 0
}
}}
/>
</InputAdornment>
)
)
}}
InputLabelProps={{ shrink: true }}
disabled={!formik.values.OverrideRate}
/>
待定:
草稿:
2条答案
按热度按时间dy1byipe1#
需要注意的是布尔值也是有效的react元素。如果你试图渲染
false
或true
,React会忽略它们。在这里,如果你的第一个条件是真的,它评估为true
,浏览器甚至不会检查其他条件(因为它后面跟着||
)。基本上当你有这样的情况时:
如果
A
为truthy,则会对其进行求值,甚至不考虑B。在您的示例中也是如此。如果状态为“draft”,则endAdornment
的值为:其为
=== true
。试着将你的前两个条件分组如下:
将修复第一个括号计算为true或false时的问题。
在
&&
的情况下,如果第一个操作数为false,则它的值为false(result中没有呈现任何内容)。如果它的值为true,则它进入下一步并呈现您想要的内容。所呈现的内容是一个对象,并且是真实的。因此,您的条件的最终计算表达式将是准确的呈现对象,您就完成了。如果我需要进一步澄清,请让我知道。
yuvru6vn2#