我正在尝试将 react.rb gem 与蛋白石一起使用,但是我遇到了麻烦。
下面是一个简单的 hello world 组件,没什么复杂的。
class Hello_World
include React::Component
define_state(:message) { "Hello World!" }
def initialize(native)
@native = native
end
def component_will_mount
puts self.message
end
def render
div do
span do
self.message
end
end
end
end
这样做:
puts React.render_to_static_markup(React.create_element(Hello_World))
得到了我的期望,这个:
Hello World!
<div><span>Hello World!</span></div>
问题是当我尝试将模板渲染到 dom 时。
这:
React.render React.create_element(Hello_World), `document.body`
只是给我:
Uncaught Error: Invariant Violation: _registerComponent(...): Target container is not a DOM element.
所以我认为这是因为document.body
尚不存在,但是以下都不能访问窗口工作(或文档):
window #is undefined
$window # is nil
Window # is undefined
似乎没有适用于 JS 等效项的蛋白石命令文档,而且我找不到任何示例工作。
我快要拔头发了,我该怎么办?
编辑:
执行以下操作实际上有效:
我没有使用 jquery,所以我必须执行以下操作才能获得document.ready
:
document.ready = function (event) {
document.addEventListener("DOMContentLoaded", event)
}
%x|document.ready(function(){
#{
React.render React.create_element(Hello_World), `document.getElementById('mount_point')`
}
})|
但它是 suuuuper hacky。