我使用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):
请告诉我发生错误的原因。
感谢你的英语不好的患者!
答案 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时,可以使用此方法 窗户。