划重点:picker不要写在form.item内
问题描述:在表单想要使用可选择组件,nutui目测picker是最优选,但是以官网示例写在form.item中出现了以下问题,fixed相对于了父元素而不是视口,页面仍然可以滚动。
左图为问题页面,右图为修改后的正确页面,放一起方便对比。
有问题的dom结构如下:
<Form.Item
label="证件类型"
name="cardType"
trigger="onConfirm"
getValueFromEvent={(...args) => args[1]}
onClick={(event, ref) => {
ref.open()
}}
rules={[{ required: true, message: "请选择证件类型" }]}
>
<Picker options={[cardTypeOptions]}>
{(value) => {
return (
<Cell
style={{
padding: 0,
'--nutui-cell-divider-border-bottom': '0',
background: 'transparent',
}}
className={value.length ? styles.cardType : styles.cardNoValue}
title={
value.length
? cardTypeOptions.filter((po) => po.value === value[0])[0]
?.text
: '请选择证件类型'
}
extra={<RectDown size={16} />}
align="center"
/>
)
}}
</Picker>
</Form.Item>
修改后的dom结构如下:
<View style={{ position: 'relative' }}>
<Form.Item
label="证件类型"
name="cardType"
rules={[{ required: true, message: "请选择证件类型" }]}
onClick={() => setCardTypeFlag(!cardTypeFlag)}
>
<Input placeholder="请选择证件类型" type="text" disabled />
</Form.Item>
<IconFont
name="rect-down"
size={14}
color="#999999"
/>
</View>
{/* 证件类型 */}
<Picker
visible={cardTypeFlag}
options={cardTypeOptions}
title="请选择证件类型"
onConfirm={(list, values) => confirmPicker(list, values)}
onClose={() => setCardTypeFlag(false)}
/>