Итак, я использую r-suite react library
, и у меня проблема со сбросом формы
Когда я использую хук use-Ref для сброса формы, я получаю сообщение об ошибке, что form-Ref.current.reset()
не является функцией
Я тоже пробую form-ref.current = null
но почему-то не работает
так как я могу сбросить свою форму?
У меня проблема с формой сброса, и похоже, что библиотека реагирования r-suite не может позволить мне сбросить форму
import React, { useState, useRef } from "react";
import {
Form,
FormGroup,
FormControl,
Button,
Container,
FlexboxGrid,
} from "rsuite";
import { quotationModel } from "../validation/validation";
const AddFormjsx = ({ addQuotation }) => {
const [val, setVal] = useState(undefined);
const formRef = useRef();
const handleVal = (e) => setVal(e);
const handleSubmite = (e) => {
console.info(e);
if (e) {
formRef.current.reset();
addQuotation(val);
}
};
return (
<Container style = {{ marginTop: "2rem" }}>
<FlexboxGrid justify = "center">
<Form
layout = "inline"
model = {quotationModel}
onChange = {handleVal}
onSubmit = {handleSubmite}
ef = {formRef}
>
<FormGroup>
<FormControl
name = "itemName"
placeholder = "Item name"
style = {{ width: 160 }}
/>
</FormGroup>
<FormGroup>
<FormControl
name = "itemPrice"
placeholder = "Item price"
style = {{ width: 160 }}
/>
</FormGroup>
<FormGroup>
<FormControl
name = "itemQuontity"
placeholder = "Item Quontity"
style = {{ width: 160 }}
/>
</FormGroup>
<Button type = "submite">Add</Button>
</Form>
</FlexboxGrid>
</Container>
);
};
export default AddFormjsx;
Проблема в этой строке: ef = {formRef}
но должно быть ref = {formRef}
Замените: formRef.current.reset();
на formRef.current._reactInternals.child.stateNode.reset()
, а также добавьте formRef.current.state.formValue = null
для сброса внутреннего значения, если вы используете его с проверкой модели, если нет, он пропустит его
компонент «Форма» не имеет реквизита «ef». Что возвращает console.info(formRef.current)?
вот ссылка на изображение: postimg.cc/q6zxCF37
const handleSubmite = (e) => { console.info(e); if (e) { console.info(formRef.current); formRef.current.reset(); addQuotation(val); } };
что выведет console.info(formRef.current)
вот console.info из useRef: postimg.cc/75xM3b7c и о console.info из e он возвращается, правда, дело в том, что эта библиотека сильно модифицирует вещь, поэтому я не могу с ней справиться
Я очень ценю ваш ответ, но на самом деле он решает половину проблемы, чтобы сбросить отображаемое значение, но внутреннее значение все еще установлено, поэтому я использую « formRef.current.state.formValue = null », чтобы решить эту проблему, и я также изучаю ее и причину это не работает в первую очередь потому, что форма, вложенная в div с отдельным вводом, я действительно не знаю, почему они это сделали, но спасибо за ваш ответ, и вы прилагаете усилия, а также счастливого кодирования
Кстати, это также не проблема, это всегда дает мне ошибку, подобную этой `formRef.current.reset не является функцией`