Предоставляет ли 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
,