我正在尝试使用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-pixireagent版本:
[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版本。由于我没有其中之一,所以我过早地排除了可能性。

    08-18 22:20