Предоставляет ли mkProgram больше функциональности, чем mkSimple?

Я пытаюсь понять разницу между mkSimple и mkProgram в Fable-Elmish или Elmish.WPF, который я на самом деле использую. (Может кто-нибудь, возможно, создать тег для elmish.wpf, пожалуйста?)

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

Комментарии в источнике выглядят так.

mkSimple: Simple program that produces only new state with 'init' and 'update'.

mkProgram: Typical program, new commands are produced by 'init' and 'update' along with the new state.

Так для чего эти команды хороши? Я смотрел на примеры в нескольких местах, но они не дают большой подсказки, могу ли я сделать то же самое с mkSimple, чем с mkProgram, и это то, что мне нужно знать.

Предоставляет ли mkProgram какую-то функциональность, которой нет у mkSimple, или все можно сделать, какой бы я не использовал? Является ли mkSimple только для простого демонстрационного использования, и должен ли я использовать mkProgram для реальных приложений, которые растут? Если вы можете сделать все с обоими, то почему разница?

1 ответ

Решение

mkSimple действительно только для учебных целей. Это помогает облегчить новым пользователям в рамках, не представляя идеи Cmd еще.

Если вы посмотрите на источник mkSimple, вы увидите, что все, что он делает, это скрывает Cmd идея (с помощью Cmd.none) и зовет mkProgram:

/// Simple program that produces only new state with `init` and `update`.
let mkSimple 
    (init : 'arg -> 'model) 
    (update : 'msg -> 'model -> 'model)
    (view : 'model -> Dispatch<'msg> -> 'view) =
    { init = init >> fun state -> state,Cmd.none
      update = fun msg -> update msg >> fun state -> state,Cmd.none
      view = view
      setState = fun model -> view model >> ignore
      subscribe = fun _ -> Cmd.none
      onError = onError }

Его происхождение происходит от Elm Architecture, которая с тех пор переименовала простую программу в beginnerProgram,

Если вы хотите написать программу любой сложности, используйте mkProgram, Если вы просто переделываете или демонстрируете основы, вы можете использовать mkSimple,

Другие вопросы по тегам