Ом get-реквизит против get-state
Я пытаюсь понять назначение двух функций OM: get-state и get-props. Посмотрите на следующий пример:
(defn example [app owner]
(reify
om/IInitState
(render-state [this state]
(println "app-state: " app )
(println "state: " state )
(println "get-props: " (om/get-props owner) )
(println "get-state: " (om/get-state owner) )
(dom/div nil "hello"))))
Вы заметите, что app
а также state
содержать именно то, что get-props
а также get-state
Возвращение, которое кажется на первый взгляд довольно излишним.
Теперь не все функции жизненного цикла (например, IWillMount
) пройти state
аргумент, поэтому, когда вам это нужно в таких обстоятельствах, очевидно, что вам нужно вызвать om/get-state
получить к нему доступ.
Тем не менее, для состояния приложения это выглядит иначе для меня. У вас всегда есть курсор состояния приложения, доступный во всех функциях, так как это аргумент верхнего уровня функции, даже если он вам нужен в обратных вызовах, вы можете просто передать его. Большинство примеров / учебных пособий используют get-state
но я не могу найти пример get-props
, Является ли get-props избыточным? Где бы я использовал это?
И еще одна вещь, связанная с этой конструкцией. В React у нас есть реквизиты и состояние, но в OM у нас есть app-state и состояние (внутреннее состояние), которое меня смутило при изучении OM. В React реквизиты передаются от родителя к ребенку, аналогично в OM мы передаем состояние приложения (курсоры) детям. Допустимы ли следующие наблюдения?
- app-state является эквивалентом реквизита React
- props is React - это просто данные, а app-state в OM - это данные, помещенные в курсоры
- это означает, что у OM нет реквизита, только курсоры состояния приложения, следовательно, функция
get-props
действительно означаетget-app-state
1 ответ
Согласно документам, get-props
в основном (или исключительно) необходимо в IWillReceiveProps
фаза. will-receive-props
получает next-props
аргумент, который содержит будущее состояние приложения / реквизиты. get-props
дает вам текущее состояние приложения / реквизиты, чтобы вы могли сравнить их.
Из ом документов для IWillReceiveProps
:
В вашей реализации, если вы хотите обнаружить переходы реквизита, вы должны использовать
om.core/get-props
чтобы получить предыдущий реквизит. Это потому, что ваша функция конструктора компонента вызывается с обновленным реквизитом.
Так что в остальное время get-props
не обязательно, потому что, как упоминалось в вопросе, у вас есть доступ к курсору.