Реагируйте, что функция инициализации userReducer не запускается при обновлении реквизита - PullRequest
1 голос
/ 11 апреля 2019

У меня есть компонент, который представляет собой форму, которую я использую для создания записей в моей базе данных.Я также хочу иметь возможность передать в этот компонент значения, которыми можно заполнить форму, что позволит мне затем обновить существующие записи в базе данных.Простая функциональность добавления / редактирования из того же компонента.

Следующий код должен объяснить, как я это делаю.media prop - это объект, содержащий данные.У меня есть эти данные уже в родительском элементе, поэтому установка значений здесь в порядке, и они проходят без проблем.Однако, как только страница загружается, 3-й init аргумент useReducer никогда не запускается повторно, и поэтому мое состояние не может быть переопределено значениями, переданными в media проп.Есть ли правильный способ вызвать функцию init при обновлении реквизита, или моя проблема архитектурная?

const MediaUploadForm = ({ media }) => {

  const init = (initialState) => {

    if (media) {
      // ... here I extract the values I need and override the initialState where required 
    } else {
      return initialState
    }
  }

  const [formState, dispatch] = useReducer(
    MediaFormReducer,
    initialState,
    init
  )

1 Ответ

0 голосов
/ 19 апреля 2019

Таким образом, использование новых функций React-хуков и сохранение функциональности компонента позволяет мне использовать useEffects() Это похоже на использование события типа componentDidUpdate.Поэтому следующий код позволяет мне проверить состояние пропа (media), а затем отправить действие, которое устанавливает мое состояние приращения.

useEffect(() => {
    if (media && id !== media.id) {
      dispatch(loadMedia(media))
    }

  })

Спасибо @sliptype за указание в правильном направлении

...