(注意:我使用的是“therubyracer”、“react-rails”和“sprockets-coffee-react”gem)
这是我的简单组件 (Hello.js.cjsx) 的代码:
# @cjsx React.DOM
Hello = React.createClass(
render: ->
<div>
Hello {@props.name || "World"}!
</div>
)
window.components ?= {}
window.components.Hello = Hello
在我的 Rails View (index.html.erb) 中,这工作得很好:
<%= render_component('components.Hello', {name: 'Jack'}) %>
但是,当我尝试这样做时:
<%= react_component('components.Hello', {name: 'Jill'}, {prerender: true}) %>
我收到这个错误:
遇到错误“ReferenceError:组件未定义”
这看起来很奇怪,因为我在我的组件中定义了它。
我做错了什么?
最佳答案
问题是对于使用 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} %>
关于javascript - 如何使用 react-rails gem 预渲染命名空间的 React 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311951/