Неправильно ли вызывать методы компонентов, передаваемые в качестве аргументов внутри редукционных действий? - PullRequest
0 голосов
/ 28 мая 2019

Я борюсь с одной задачей, на которую я был назначен, и единственный найденный мной обходной путь - вызвать обратный вызов аргумента действия внутри действия. Это плохая идея с точки зрения дизайна, потому что сам код работает и проходит многочисленные тесты? Общая цель этого решения состоит в том, чтобы каким-то образом вызывать функцию компонента при соблюдении определенной логики.


export function myAction(componentClb: () => void): any {
  return (dispatch: Dispatch<AppStore>): void => {
    someRESTAPIcall()
      .then((condition) => {
        condition
          ? dispatch(anotherActionThatTakesCallbackAsArgument(componentClb))
          : componentClb();
      })
      .catch((error: Error) => {
        dispatch(myErrorAction());
      });
  };
}

1 Ответ

0 голосов
/ 28 мая 2019

Самая большая ошибка в этом состоит в том, чтобы принимать компоненты React в качестве функциональных классов. Компоненты на самом деле просто для того, чтобы справиться с тем, ЧТО и КАК рендеринга страницы. Все, что находится вне логики рендеринга, должно быть удалено из него.

Вместо того, чтобы работать в качестве обратного вызова, этот anotherActionThatTakesCallbackAsArgument должен обновить хранилище с избыточностью.

Контейнер, к которому принадлежит componentClb, должен быть подключен к хранилищу резервов и выбирать поля из хранилищ и передавать эти поля в componentClb как реквизиты, чтобы componentClb мог обрабатывать рендеринг на основе ответа myAction

С предоставленной вами информацией трудно привести конкретный пример кода. Возможно, опишите сценарий, который вы пытаетесь решить, и люди смогут дать вам более прямые отзывы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...