如何使用react-rails gem预渲染命名空间的反应组件?

pha*_*ryx 5 javascript ruby ruby-on-rails reactjs

(注意:我正在使用'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
Run Code Online (Sandbox Code Playgroud)

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

<%= render_component('components.Hello', {name: 'Jack'}) %>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个:

<%= react_component('components.Hello', {name: 'Jill'}, {prerender: true}) %>
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Encountered error "ReferenceError: components is not defined"

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

我究竟做错了什么?

Zak*_*ria 1

我不确定你使用的语法。请更换以下行:

window.components ?= {}
window.components.Hello = Hello
Run Code Online (Sandbox Code Playgroud)

window.Hello = Hello
Run Code Online (Sandbox Code Playgroud)

(您可以点击此链接获取更多示例)。