首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用react-rails gem预先呈现命名空间的react组件?

如何使用react-rails gem预先呈现命名空间的react组件?
EN

Stack Overflow用户
提问于 2014-10-11 14:52:00
回答 2查看 1.3K关注 0票数 5

(注意:我使用的是'therubyracer‘、'react-rails’和‘链轮-咖啡-反应’)

这是我的简单组件(Hello.js.cjsx)的代码:

代码语言:javascript
复制
# @cjsx React.DOM

Hello = React.createClass(
  render: ->
    <div>
      Hello {@props.name || "World"}!
    </div>
)

window.components ?= {}
window.components.Hello = Hello

在我的rails视图(index.html.erb)中,这工作得很好:

代码语言:javascript
复制
<%= render_component('components.Hello', {name: 'Jack'}) %>

但是,当我尝试这样做时:

代码语言:javascript
复制
<%= react_component('components.Hello', {name: 'Jill'}, {prerender: true}) %>

我得到了这个错误:

Encountered error "ReferenceError: components is not defined"

这看起来很奇怪,因为我在我的组件中定义它。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-10-25 13:19:06

问题是,对于使用render_component呈现的任何内容,都需要向全局window对象注册组件。这并不是很理想,但它只是目前的工作方式。

这就是我一直在做的。不是很理想,但很有帮助。

代码语言:javascript
复制
components /
    namespace /
       MyComponent.js.jsx

然后在我的文件中这样做:

代码语言:javascript
复制
# 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} %>

票数 2
EN

Stack Overflow用户

发布于 2014-10-22 20:58:30

我对你使用的语法不太确定。请替换下面的行:

代码语言:javascript
复制
window.components ?= {}
window.components.Hello = Hello

使用

代码语言:javascript
复制
window.Hello = Hello

(您可以关注this link以获取更多示例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26311951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档