Я пытаюсь выяснить, «правильный» способ сделать следующий React:React: обновить значение поля на основе другого поля в динамической форме
- У меня есть форма с двумя полями,
url
иtitle
. - Когда значение
url
изменяется, я вызываю вызов API на Embedly для получения метаданных о ссылке. - После того как метаданные были получены, я хочу обновить поле
title
с результатом.
Сложность в том, что поля url
и title
не находятся в одном и том же компоненте. Вот основная структура вида (я использую Formsy):
<Formsy.Form onSubmit={this.submitForm} onChange={this.updateState} ref="form">
{fields.map(field => <FormComponent
name={field.name}
type={field.type}
value={field.value}
/>)}
<Button type="submit">Submit</Button>
</Formsy.Form>
Как вы можете видеть, образуют петли над массивом полей и вызывает общий <FormComponent/>
компонент для каждого из них, которая в основном большой switch
, который затем вызывает соответствующий Formsy Component на основании поля type
.
Логика запроса Embedly уже работает внутри компонента для url
поля, но я не уверен, если есть способ сделать то, что я хочу в то же время с помощью компонента по умолчанию Input
для title
?
Это одна из причин я переключился на [реагировать-перевождь форма] (https://github.com/davidkpiano/react- перевождь-форма). Он поддерживает «модели» в Redux, такие как модель «веб-сайт», которая состоит из URL-адреса и названия. И все, что мне нужно сделать, это пощекотать 'onChange' или' onBlur' в поле ввода, таком как url, который отправляет действие для вызова API, и как только он возвращается, я отправляю (actions.change ('website. title ', fetchedTitle)), который автоматически изменяет ввод заголовка на указанное значение (независимо от того, где он находится), так как это управляемый вход, который подается прямо из Redux. – ffxsam
Да, я начинаю думать, что я строю свой собственный, худший мини-Redux. Но, по крайней мере, это помогает мне понять, почему Redux может быть полезным;) – Sacha