react-native – 数据源属性不会从试剂传播到React Native ListView组件的render方法

我正在尝试在试剂中呈现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)}]))

以上导致“Failed propType:ListView中未指定必需的prop dataSource.请检查app.ios.ui.main_scene的render方法.”接下来是“无法读取未定义的属性’rowIdentities’,因为数据源在ListView的render方法中未定义.

我的第一个猜测是,在试剂/打嗝或其他任何东西的某处内部对某些“数据”属性进行了一些特殊处理,但我无法找到为什么该属性未正确传播的单一线索.

而且,是的.(.cloneWithRows数据源行)实际上返回一个有效的ListViewDataSource对象实例.

然后如果我传递:data-source as:dataSource我得到的是一个令人费解的“StaticRenderer.render():必须返回一个有效的ReactComponent.你可能已经返回了undefined,一个数组或一些其他无效对象.”

我使用反应原生0.18.1和试剂0.5.1与重新帧0.6.0.我用试剂0.6.0-alpha检查了这个并重新构建了0.7.0-alpha并得到了相同的错误.

我一直在挖这个几个小时,我想我需要一些帮助.尝试修复此问题的任何提示/想法,代码中的任何引用都要查看?非常感谢提前.

最佳答案
好吧,首先要将数据源传递给视图:dataSource而不是:data-source.后者因任何原因都不起作用.作为旁注,render行方法可以传递为:render-row或:renderRow,它可以双向工作.嘿.

其次,render-row函数应返回React组件而不是数组.后者如果稍后由试剂渲染数组会没问题,但是listview不会对从render-row获取的数据进行任何类型的后处理,只是尝试将其返回到React,如果它是普通的clojure数组.

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

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

然后一切正常. 🙂

转载注明原文:react-native – 数据源属性不会从试剂传播到React Native ListView组件的render方法 - 代码日志