#reactjs
Вопрос:
У меня есть следующее:
{inputFields.map((inputField, index) =gt; ( lt;Fragment key={`${inputField}~${index}`}gt; lt;Select isClearable classNamePrefix="select" ref={myRef} menuPortalTarget={document.body} styles={style} placeholder="Select Foods" name="Foods" value={inputField.foods} options={options} onChange={event =gt; handleInputChange2(index, event)} className="select selectNarrow" /gt;amp;nbsp;amp;nbsp; lt;TextField InputLabelProps={{shrink: true,}} id="standard-basic" label="Quantity" value={inputField.Quantity} name="Quantity" onChange={event =gt; handleInputChange(index, event)} type="number" variant="outlined" InputProps={{ inputProps: { min: 0, max: 100 } }} /gt; lt;/Fragmentgt; ))}
Что я пытаюсь сделать, так это после отправки очистить оба этих поля.
const [inputFields, setInputFields] = useState([ { Food: '', Quantity: '' } ]); const handleInputChange2 = (index, event) =gt; { if (!event) { event = { label: '', value: '', }; } const values = [...inputFields]; values[index] = event; setInputFields(values); };
Если я попытаюсь добавить поля setInput (null) Я получаю ошибку при отправке: InputFields.map не является функцией
Есть идеи о том, как я могу очистить эти поля после отправки?
Комментарии:
1. Пожалуйста, покажите, что у вас есть в полях ввода по умолчанию
2. По умолчанию это массив — [ { «Еда»: «», «Количество»: «» } ]
3. Как выглядит функция отправки?
4. const onSubmit = e =gt; { e.preventDefault(); firebase . firestore() .коллекция(«блюда») .добавьте({ Имя : имя, Блюда : блюда, Метод : метод приема пищи, Продукты питания : поля ввода }) .затем(() =gt; Имя набора(«»), набор услуг(«»), страна набора(null), setLang(null), Метод набора(«»), набор продуктов(null)) };
5. @PaulVI просто верните состояние ваших полей по умолчанию после отправки:
setInputFields(YOUR_INITIAL_STATE)
Ответ №1:
const INITIAL_STATE = [ { "Food": "", "Quantity": "" } ]; const [inputFields, setInputFields] = useState(INITIAL_STATE);
После отправки:
setInputFields(INITIAL_STATE);
Комментарии:
1. Это все еще остается — имеет ли значение тот факт, что он находится в массиве? Нужно ли мне вообще ссылаться на индекс?
2. @PaulVI Массив не должен быть проблемой. Лучше ссылаться на поле
name
, например:[e.target.name]: e.target.value
3. Извините, на самом деле это действительно так, но метка опции все еще остается — как ее очистить, чтобы заполнитель вернулся?
4. как и выше, опция «Выбрать» все еще видна?
5. @PaulVI можете ли вы воспроизвести вашу проблему с codesandbox и т. Д.?
Ответ №2:
В вашей функции, которая обрабатывает отправку, выполните это:
const handleSubmission = async (e) =gt; { e.preventDefault(); // Say you're submitting to a server using axios, try{ await axios.post(URL, {...data to submit}, { headers: {} }); // On successful submission, clear all fields setInputFields({ Food: '', Quantity: '', }); catch(error){ ...handle errors }
Я бы посоветовал вам написать свое сообщение так:
onSubmit={e =gt; handleSubmission(e)}
Комментарии:
1. Я не использую axios и уже делаю это
2. Не имеет значения, используете ли вы axios. Вероятно, вы отправляете данные на серверную часть; поэтому используйте fetch или любой другой удобный для вас модуль…