How to make a preliminary exchange of a component that responds to a name change using a gem with reactive rails?

(Note: I use gems 'therubyracer', 're-rails' and 'sprockets-coffee-react')

This is the code for my simple component (Hello.js.cjsx):

# @cjsx React.DOM

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

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

In my view of rails (index.html.erb) this works fine:

<%= render_component('components.Hello', {name: 'Jack'}) %>

However, when I try to do this:

<%= react_component('components.Hello', {name: 'Jill'}, {prerender: true}) %>

I get this error:

Encountered error "ReferenceError: components is not defined"

which seems weird because I define it in my component.

What am I doing wrong?

+4
source share
2 answers

, , render_component, , window. , , .

, . , .

components /
    namespace /
       MyComponent.js.jsx

:

# components/namespace/MyComponent.js.jsx

window.NamespaceMyComponent = React.createClass({});

module.exports = window.NamespaceMyComponent;

:

require('components/namespace/MyComponent')

render_component:

<%= render_component "NamespaceMyComponent", {}, {prerender: true} %>

+2

, . , :

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

window.Hello = Hello

( ).

+1

All Articles