【问题标题】:Using React Native MapView in ClojureScript Reagent在 ClojureScript 试剂中使用 React Native MapView
【发布时间】:2017-09-19 11:07:50
【问题描述】:

我正在尝试使用来自https://github.com/airbnb/react-native-mapsMapView 使用试剂。它工作正常,但是当onRegionChange 事件被触发时,我怎样才能获得MapView 的本地状态?尝试使用当前/组件,但始终是 nil

(def Expo (js/require "expo"))
(def map-view (r/adapt-react-class (.-MapView Expo)))

(defn my-map []
   (r/create-class
     {:component-did-mount (fn [this] 
                       (println "component mount "))
      :reagent-render (fn []
                  (let [this (r/current-component)]
                    [map-view {:style {:flex 1}
                               :initialRegion {:latitude 37.78825
                                               :longitude -122.4324
                                               :latitudeDelta 0.0922
                                               :longitudeDelta 0.0421}
                                 :onRegionChange (fn []
                                                  ;; Would like to see state here.
                                                  (println (.. this -state))                                                       )}]))}))

【问题讨论】:

标签: react-native clojure android-mapview clojurescript reagent


【解决方案1】:

地区信息

onRegionChange 回调以 Region 作为参数。 Region 具有以下签名:

type Region {
  latitude: Number,
  longitude: Number,
  latitudeDelta: Number,
  longitudeDelta: Number,
}

您可以使用goog.object/get 从区域中获取值。

如果您获得 region 并从中提取值,您的 my-map 看起来像:

(defn my-map []
  [map-view {:style         {:flex 1}
             :initialRegion {:latitude       52.3702
                             :longitude      4.89516
                             :latitudeDelta  0.0922
                             :longitudeDelta 0.0421}
             :onRegionChange (fn [region]
                               (alert (str "Latitude: "
                                           (goog.object/get region "latitude")
                                           "\nLongitude: "
                                           (goog.object/get region "longitude"))))}])

latitudeDeltalongitudeDelta的获取方式相同。

当您拖动地图时,会显示经纬度:

组件

如果您想访问组件本身,您的代码可以正常工作,您只需 visualize it:

(defn jsx->clj
  [x]
  (into {} (for [k (.keys js/Object x)] [k (aget x k)])))

(defn my-map []
  (let [this (r/current-component)]
    [map-view {:style          {:flex 1}
               :initialRegion  {:latitude       37.78825
                                :longitude      -122.4324
                                :latitudeDelta  0.0922
                                :longitudeDelta 0.0421}
               :onRegionChange (fn [region]
                                 ;; Would like to see state here.

                                 (alert "The component..."
                                        (str (jsx->clj this))))}]))

这会打印如下内容:

不确定您是否可以对组件执行任何操作,我认为您需要Region 信息。

【讨论】:

  • 感谢您的辛勤工作。但我的问题是让当地国家而不是地区。因为本地状态有子组件、区域、标记等。我需要该组件的所有本地状态。我如何获得本地状态?
  • 感谢您的提问。 ;) 很高兴我现在也正在编写​​一个 React Native 应用程序。啊哈,我明白了。当我查看this 时,“状态”是nil,即使有可用的标记。也许您可以创建自己的回调函数覆盖,该函数在:componentDidMount 中有更多状态。这是一个开始:stackoverflow.com/questions/43176862/….
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多