【发布时间】:2021-01-30 00:48:17
【问题描述】:
我有一个用 React Typescript 编写的带有钩子的应用程序,我试图以两种方式(受控/不受控)设置日期输入字段。当用户更改输入或组件从其父组件接收道具时,它应该更改。
但是,我的问题是在输入字段设置 value 属性后,用户无法更改输入字段中的值...这是我的代码:
interface Props {
valuesChanged: (type: string, value: string) => void;
minChanged: string;
maxChanged: string;
}
const DateInputField: FC<Props> = ({ valuesChanged, minChanged, maxChanged }: Props) => {
const [minValue, setMinValue] = useState<string>('');
const [maxValue, setMaxValue] = useState<string>('');
// Input changed in parent, trigger changes here
useEffect(() => {
const date = moment(minChanged, 'YYYY-MM-DD', true);
if (date.isValid()) {
setMinValue(minChanged);
}
}, [minChanged]);
useEffect(() => {
const date = moment(maxChanged, 'YYYY-MM-DD', true);
if (date.isValid()) {
setMaxValue(maxChanged);
}
}, [maxChanged]);
// Input changed in input field
const inputChanged = (type: string, input: string) => {
const date = moment(input, 'YYYY-MM-DD', true);
if (date.isValid()) {
valuesChanged(type, input); // tell parent component values changed
if (type === 'startDate') {
setMinValue(input);
} else if (type === 'endDate') {
setMaxValue(input);
}
}
};
return (
<div>
<input value={maxValue} type="date" onChange={(e) => inputChanged('endDate', e.target.value)} />
<input value={maxValue} type="date" onChange={(e) => inputChanged('endDate', e.target.value)} />
</div>
);
};
export default DateInputField;
valuesChanged 属性是一个函数,告诉父组件此组件中的值已更改。 希望有人能帮忙!
【问题讨论】:
-
isValid 函数是什么样的?
-
它来自时刻,据我所知用于检查日期是否有效:momentjscom.readthedocs.io/en/latest/moment/01-parsing/…
标签: reactjs typescript input react-hooks