react-rails gem不呈现React组件包含子组件

时间:2016-11-18 05:20:37

标签: javascript reactjs react-rails

我使用React.js,我想通过使用反应轨道的ruby gem来进行服务器端渲染。

我使用它,但是出现了问题。

不呈现子组件。

例如

单一组件

//javascript
class Hoge extends React.Component{
  render(){
    return(
      <div>component</div>
    )
  }
}

//html
<%= react_component('Hoge', {}, {prerender: true}) %>

没关系。它被渲染了。

组件包括子组件。(相同文件)

//javascript
class Fuga extends React.Component{
  render(){
    return(<div>Child Component</div>)
  }
}

class Hoge extends React.Component{
  render(){
    return(<Fuga />)
  }
}

//html
<%= react_component('Hoge', {}, {prerender: true}) %>

没关系。它被渲染了。

组件包括子组件。(不同文件)

//Fuga.js
class Fuga extends React.Component{
  render(){
    return(
      <div>Child Component</div>
    )
  }
}

// Hoge.js.jsx

import Fuga from './Fuga.js.jsx'
// or var Fuga = require('./Fuga.js.jsx')

class Hoge extends React.Component{
  render(){
    return(
      <Fuga />
    )
  }
}

// html
<%= react_component('Hoge', {}, {prerender: true}) %>

很糟糕。发生错误。

// rails error
ActionView::Template::Error (ReferenceError: unknown: console is not defined):

请告诉我发生错误的原因。

感谢你的英语不好的患者!

1 个答案:

答案 0 :(得分:0)

我打电话给他     ReactRailsUJS.mountComponents() 在网页上。创建一个JS文件,在页面加载时调用上面的脚本。这会导致所有组件在Web页面上都可用,因此对其他组件的任何引用都应该起作用。 以下是react-rails docs的摘录:

  

你也可以装载&amp;从&lt;%= react_component(...)卸载组件   %GT;标签使用UJS:

     

//在页面上挂载所有组件:ReactRailsUJS.mountComponents()   //在选择器中挂载组件:   ReactRailsUJS.mountComponents(“。my-class”)//在其中安装组件   特定节点:ReactRailsUJS.mountComponents(specificDOMnode)

     

//卸载的工作方式相同:ReactRailsUJS.unmountComponents()   ReactRailsUJS.unmountComponents(“我的类”)   ReactRailsUJS.unmountComponents(specificDOMnode)

     

当通过AJAX调用或模态修改DOM时,可以使用此方法   窗户。