javascript - React-rails gem 不渲染 React 组件包含子组件

标签 javascript reactjs react-rails

我使用 React.js,我想使用 ruby​​ gem(即 React-rails)进行服务器端渲染。

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

子组件未渲染。

例如

单个组件

//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):

请告诉我为什么会发生该错误。

感谢您对我蹩脚的英语的耐心!

最佳答案

我通过调用让它工作 ReactRailsUJS.mountComponents() 在网页上。创建一个 JS 文件,该文件将在页面加载时调用上面的脚本。这会导致所有组件在网页上变得可用,因此对其他组件的任何引用都应该有效。 这是react-rails docs 的摘录:

You can also mount & unmount components from <%= react_component(...) %> tags using UJS:

// Mount all components on the page: ReactRailsUJS.mountComponents() // Mount components within a selector: ReactRailsUJS.mountComponents(".my-class") // Mount components within a specific node: ReactRailsUJS.mountComponents(specificDOMnode)

// Unmounting works the same way: ReactRailsUJS.unmountComponents() ReactRailsUJS.unmountComponents(".my-class") ReactRailsUJS.unmountComponents(specificDOMnode)

You can use this when the DOM is modified by AJAX calls or modal windows.

关于javascript - React-rails gem 不渲染 React 组件包含子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40669866/

相关文章:

javascript - addEventListener 无法正常工作

javascript - 为什么我的 React Accordion 动画不起作用?

reactjs - 生成带有阿拉伯字体的 PDF

reactjs - useDispatch Hook 以错误的顺序触发,

javascript - 更新属性时如何避免状态变化

javascript - 组件不处理空 prop

javascript - 从 if block 中执行 else block

ruby-on-rails-4 - 警告 : input is a void element tag and must not have `children` or use `props.dangerouslySetInnerHTML` . 检查 null 的渲染方法

javascript - 在 React 中获取 Selected 选项属性

javascript - ExecJS::RuntimeError Rails 4 使用react-rails gem