Являются ли имена действий частью публичного API в избыточной форме? - PullRequest
0 голосов
/ 09 ноября 2018

Во-первых, я не совсем уверен, что такое префикс @@ в действиях, которые означают большинство сторонних пакетов, которые я установил в своем приложении React / Redux - если они означают «приватный», то ответ на мой вопрос очевидно. Я вижу их в расширении Redux devtools для Chrome.

В случае, если это просто соглашение об области действия @@<package>/<action>, у меня есть конкретный вопрос относительно действий в пакете redux-form. Действия, по-видимому, не задокументированы , поэтому я не уверен, смогу ли я безопасно использовать их в моих редукторах , не беспокоясь о прерывании изменений.

Для большего контекста в случае, если мой подход совершенно неверен (все еще выясняются шаблоны): я хочу удалить форму регистрации и представить сообщение об успешном завершении после успешного завершения. redux-form отправляет действие типа @@redux-form/SET_SUBMIT_SUCCEEDED, при этом meta.form сообщает мне, что это была форма, которую я назвал register. Поэтому я использовал бы его в своем редукторе RegisterPage, чтобы установить логическое значение isSuccess, и использовал его для изменения вида.

1 Ответ

0 голосов
/ 10 ноября 2018

Если они явно не задокументированы, я бы счел их частными и не использовал бы их напрямую. Хотя это официально нигде не указано, префикс @@ часто указывает на частные действия, которые не должны обрабатываться другим кодом редуктора. Я думаю, что он возник из действия @@redux/INIT_{random string} (обсуждение имен можно найти в этой теме github ):

В новых документах (# 140) мы должны уточнить, что любые действия имеют префикс с @@ не предназначены для обработки. Например, вы никогда не должны пытаться обрабатывать @@ INIT.

В самом самом редукционном коде конфиденциальность также явно указана:

/**
 * These are private action types reserved by Redux.
 * For any unknown actions, you must return the current state.
 * If the current state is undefined, you must return the initial state.
 * Do not reference these action types directly in your code.
 */

Для вашей конкретной проблемы: вы можете предоставить onSubmitSuccess функцию для HOC и отправить свое собственное действие для обновления вашего собственного редуктора, или вы можете напрямую зависеть от состояния формы избыточности и получить этот логический флаг через hasSubmitSucceeded селектор . Лично я считаю, что второй вариант лучше, потому что он не вводит избыточное состояние в вашем магазине - избыточная форма уже хранит информацию о том, была ли форма успешно отправлена, делая это самостоятельно в другом подредукторе, что может привести к двум логические значения, непреднамеренно расходящиеся.

...