gpt4 book ai didi

javascript - 使用 @unform 和 react-datepicker 破坏编辑屏幕的 Datepicker 组件

转载 作者:行者123 更新时间:2023-12-01 15:17:37 25 4
gpt4 key购买 nike

我创建了以下组件来选择 UnForm 中的日期:

export default function DatePickerInput({ name, ...rest }) {
const datepickerRef = useRef(null);
const { fieldName, defaultValue = '', registerField } = useField(name);

const [date, setDate] = useState(defaultValue || null);
useEffect(() => {
registerField({
name: fieldName,
ref: datepickerRef.current,
path: 'props.selected',
});
}, [fieldName, registerField]);

return (
<Label htmlFor={fieldName}>
<UnInput>
<ReactDatePicker
ref={datepickerRef}
selected={date}
onChange={setDate}
dateFormat="dd/MM/yyyy"
placeholderText="dd/mm/aaaa"
writable="true"
{...rest}
/>
</UnInput>
</Label>
);
}

要保存记录,组件工作正常,加载并保存我选择的日期。当我要编辑一条记录时,尝试在初始加载中加载日期时,页面损坏并显示以下错误:
Unhandled Rejection (TypeError): Cannot assign to read only property 'selected' of object '#<Object>'

如果我注释掉 path: 'props.selected' 行, 在 useEffect ()屏幕没有坏,但是组件里没有填写日期。它是如何工作的?

最佳答案

问题:
formRef.current.setFieldValue('birthday',value)这将尝试在提供的 path 上设置值,在我们的例子中,提供的路径是 props.selected .

props.selected是只读属性,因此您无法在 props 上设置值因此错误。

useEffect(() => {
registerField({
name: fieldName,
ref: datepickerRef.current,
path: 'props.selected', // <---- this is props, and it's readonly
clearValue: (ref) => {
ref.clear();
},
});
}, [fieldName, registerField]);

解决方案:

您可以删除 path并使用 gettersetter方法,命名为 getValuesetValue :
setValue : 设置初始值或从 setFieldValue 传递的任何值
getValue :在提交时获得值(value)
useEffect(() => {
registerField({
name: fieldName,
ref: datepickerRef.current,
clearValue: ref => {
ref.clear();
},
setValue: (e, v) => {
setDate(new Date(v)); // <---- Setting up default value
},
getValue: () => {
return datepickerRef.current.props.selected; // to get selected value from Date picker's props
// OR
return Date.toString(); // to get selected value from state it self
}
});
}, [fieldName, registerField]);

工作演示 :

Edit #SO-Datepicker-unform-setvalue

关于javascript - 使用 @unform 和 react-datepicker 破坏编辑屏幕的 Datepicker 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62047857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com