Ом 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 не обязательно, потому что, как упоминалось в вопросе, у вас есть доступ к курсору.

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