3

我正在尝试在试剂中呈现 React Native ListView。

我有以下片段:

(def data-source
 (React.ListView.DataSource. #js{:rowHasChanged (fn [a b] false)}))

(defn render-row []
  [ui/view])

(def rows
  (clj->js ["whoa", "hey"]))

(defn main-scene []
  (fn []
    [ui/list-view {:render-row render-row
                   :data-source (.cloneWithRows data-source rows)}]))

以上导致“道具类型失败:dataSource未指定所需道具ListView。检查渲染方法app.ios.ui.main_scene。” 随后是“无法读取未定义的属性'rowIdentities'”,因为数据源在ListView的渲染方法中未定义。

我的第一个猜测是在试剂/打嗝或其他任何内部的某处对“数据”属性进行了一些特殊处理,但我找不到任何线索来解释为什么该属性没有正确传播。

而且,是的,(.cloneWithRows data-source rows)实际上返回了一个有效的 ListViewDataSource 对象实例。

然后,如果我通过了:data-source:dataSource我得到的只是一个令人费解的“StaticRenderer.render():必须返回一个有效的 ReactComponent。您可能返回了未定义的数组或其他一些无效对象。”

我正在使用react-native 0.18.1和。我已经检查过这个并得到了同样的错误。reagent 0.5.1re-frame 0.6.0reagent 0.6.0-alphare-frame 0.7.0-alpha

我已经挖掘了几个小时,我想我需要一些帮助。尝试解决此问题的任何提示/想法,要查看的代码中的任何引用?提前致谢。

4

1 回答 1

5

嗯,第一件事是数据源应该传递给视图 as:dataSource而不是 as :data-source。无论出于何种原因,后者都不起作用。附带说明一下,render row 方法既可以作为:render-rowor传递,:renderRow也可以双向工作。呵呵。

其次,该render-row函数应该返回一个 React 组件而不是一个数组。如果数组稍后由试剂渲染,后者会没问题,但是列表视图不会对从渲染行获得的数据进行任何类型的后处理,而只是尝试将其返回给 React,如果它是普通的clojure数组。

所以上面的render-row函数应该写成:

(defn render-row []
  (r/as-element [ui/view]))

然后一切正常。:)

于 2016-01-30T16:25:04.447 回答