我正在尝试使用Reagent和React-Pixi在Clojurescript中构建游戏,但是一旦我尝试做任何事情,我都会得到:
错误:不变违反:PIXIStage.render()必须返回一个有效的ReactComponent。您可能返回了undefined,数组或其他无效对象。
重现此情况的最小情况是:
(ns react-sprites.core
(:require [cljsjs.react-pixi]
[reagent.core :as r]))
(def stage (r/adapt-react-class js/ReactPIXI.Stage))
(defn root [] [stage {:width 300 :height 300}])
(r/render-component [root]
(. js/document (getElementById "app")))
具体来说,使用
react-pixi
和reagent
版本:[reagent "0.6.0-rc"]
[cljsjs/react-pixi "0.8.1-0"]
附加信息
我已经在调试器中进行了追溯,并且在ReactPIXI's
canvas
method中由React.createElement("canvas")
生成的render()
上引发了不变的违规行为,因此显然正在创建的画布不是有效的ReactComponent
。我真的不知道从这里去哪里。 最佳答案
原来,这里的问题归结为版本不兼容。我以为我在Reagent 0.6上运行并使用了最新的React,但似乎该应用程序未得到正确的更新,并且仍在使用0.5.1,该版本使用的React版本与react-pixi的版本不兼容。要修复它,我必须强制进行更新,此后它开始起作用。在重现此问题时,我也遇到了浏览器缓存问题。
总而言之,值得尝试的事情包括:
$ lein clean
# edit the dependency information
$ lein figwheel
附带说明一下,我在调试时发现的其他错误消息使我误入歧途,其中一些警告消息页面上可能运行多个React版本。由于我没有其中之一,所以我过早地排除了可能性。