Что такое стандартное соглашение Flux для структурирования полезной нагрузки?

Я хочу использовать стандарт Flux Standard Action для написания действий для моего приложения Redux, и я не уверен, как должна быть структурирована сама полезная нагрузка. Пример, приведенный в репозитории Flux Standard Action github:

{
  type: 'ADD_TODO',
  payload: {
    text: 'Do something.'  
  }
}

А что, если я передаю несколько фрагментов информации в своей полезной нагрузке? Например, в простом приложении todo моя полезная нагрузка передает объект todo (а не просто текст todo в приведенном выше примере). Я не уверен, должен ли он быть структурирован следующим образом:

{
  type: 'ADD_TODO',
  payload: {
    title: 'Do something.',
    priority: 'HIGH',
    completed: false
  }
}

Или должен ли объект todo быть вложен в полезную нагрузку, например:

{
  type: 'ADD_TODO',
  payload: {
    todo: {
      title: 'Do something.',
      priority: 'HIGH',
      completed: false
    }
  }
}

Похоже, что разница заключается в том, предназначена ли полезная нагрузка БЫТЬ или СОДЕРЖАТЬ данные, потребляемые редьюсерами. Иными словами, должны ли мои редукторы ожидать определенного типа данных в качестве полезной нагрузки (полезная нагрузка ЯВЛЯЕТСЯ объектом задачи) или они должны указывать, что они получают из полезной нагрузки (полезная нагрузка СОДЕРЖИТ объект задачи).


person ailurus    schedule 04.12.2016    source источник


Ответы (1)


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

Согласно приведенной выше цитате, payload должны быть просто данными, которые ищет ваш редуктор. что-то вроде,

{
  type: 'ADD_TODO',
  payload: {
    title: 'Do something.',
    priority: 'HIGH',
    completed: false
  }
}

Ваш редьюсер будет генерировать новое состояние на основе action, которое вы передаете, и наше действие отвечает за то, чтобы сообщить reducer, что нужно сделать.

Когда ваш редюсер получает действие FS с type: 'ADD_TODO' , он знает, что ему нужно добавить задачу, а задача имеет свойство payload.

Таким образом, очевидно, что полезная нагрузка ваших действий будет задачей. Не надо рассказывать, что там в полезной нагрузке. Потому что сам FSA сообщает, что это действие содержит полезную нагрузку type todo.

person Thaadikkaaran    schedule 05.12.2016
comment
Спасибо, это имеет большой смысл. Еще один вопрос. В этом ответе Мишель предпочитает всегда делать полезную нагрузку объектом (а не необработанным значением), чтобы данные могли может быть легко добавлен без изменения принимающих сайтов и всегда будет выполнять payload: { id: id }, а не просто payload: id. Вы бы согласились или не согласились бы с этим в таком сценарии, как «REMOVE_TODO», где нужен был бы только идентификатор? - person ailurus; 06.12.2016
comment
Я согласен с ответом Мишель. С действием REMOVE_TODO ваш редьюсер знает, что действие имеет полезную нагрузку типа todo с игнорируемыми свойствами. Потому что REMOVE_TODO действию нужно только id свойство. - person Thaadikkaaran; 06.12.2016
comment
Я вижу, вся идея стандартных действий Flux теперь имеет для меня гораздо больше смысла. Спасибо за ваши ответы! - person ailurus; 06.12.2016
comment
... другими словами, payload может содержать все, что вы хотите, что имеет смысл в контексте вашего редьюсера или промежуточного программного обеспечения, верно? - person Todd; 21.02.2018