Сам реактивный рельс не отображается. Компонент React содержит дочерние компоненты.

Я использую React.js и хочу выполнять рендеринг на стороне сервера, используя ruby ​​gem, который является response-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):

Пожалуйста, скажите мне, почему произошла эта ошибка.

Спасибо за терпение моему плохому английскому!

1 ответ

Я получил его, вызвав ReactRailsUJS.mountComponents() на веб-странице. Создайте JS-файл, который будет вызывать скрипт выше при загрузке страницы. Это приводит к тому, что все компоненты становятся доступными на веб-странице, поэтому любые ссылки на другие компоненты должны работать. Вот выдержка из документов по реактивным рельсам:

Вы также можете монтировать и размонтировать компоненты из тегов <% =act_component (...)%>, используя UJS:

// Монтируем все компоненты на странице: ReactRailsUJS.mountComponents() // Монтируем компоненты в селекторе: ReactRailsUJS.mountComponents(". My-class") // Монтируем компоненты в конкретном узле: ReactRailsUJS.mountComponents (specificDOMnode)

// Размонтирование работает так же: ReactRailsUJS.unmountComponents() ReactRailsUJS.unmountComponents(". My-class") ReactRailsUJS.unmountComponents(specificDOMnode)

Вы можете использовать это, когда DOM изменяется вызовами AJAX или модальными окнами.

Другие вопросы по тегам