(注意:我正在使用'therubyracer','react-rails'和'sprockets-coffee-react'宝石)
这是我的简单组件(Hello.js.cjsx)的代码:
# @cjsx React.DOM
Hello = React.createClass(
render: ->
<div>
Hello {@props.name || "World"}!
</div>
)
window.components ?= {}
window.components.Hello = Hello
在我的rails视图(index.html.erb)中,这很好用:
<%= render_component('components.Hello', {name: 'Jack'}) %>
然而,当我尝试这个时:
<%= react_component('components.Hello', {name: 'Jill'}, {prerender: true}) %>
我收到此错误:
Encountered error "ReferenceError: components is not defined"
这看起来很奇怪,因为我在我的组件中定义它。
我做错了什么?
答案 0 :(得分:2)
问题是,对于使用render_component
呈现的任何内容,它要求使用全局window
对象注册该组件。这有点不理想,但它暂时如何运作。
这就是我一直在做的事情。不理想,但有帮助。
components /
namespace /
MyComponent.js.jsx
然后在我的文件中执行此操作:
# components/namespace/MyComponent.js.jsx
window.NamespaceMyComponent = React.createClass({});
module.exports = window.NamespaceMyComponent;
这最后一部分允许我使用browserify并要求我的模块如下:
require('components/namespace/MyComponent')
并使用render_component
这样的帮助:
<%= render_component "NamespaceMyComponent", {}, {prerender: true} %>
答案 1 :(得分:1)
我不确定您使用的语法。 请替换以下行:
window.components ?= {}
window.components.Hello = Hello
带
window.Hello = Hello
(您可以按照this link了解更多示例)。