Как вы ссылаетесь на сторонние компоненты реагирования в приложении Rails?

Я создаю приложение, используя гем react-rails. Это означает, что все ресурсы проходят через конвейер ресурсов rails. Чтобы получить доступ к сторонним библиотекам javascript, я использовал rails-assets.org, который объединяет пакеты javascript из Bower в вашу среду rails. Большинство пакетов можно просто вызвать непосредственно в коде javascript.

Поэтому, если вы добавляете пакет, возьмите markdown библиотеку уценки, вы включаете ее следующим образом:

gem 'rails-assets-marked', source: 'https://rails-assets.org'

А затем можете легко вызвать его из любого файла js в вашем приложении rails, например:

console.log(marked('I am using __markdown__.'));

Однако как использовать пакеты, которые не являются функциями, а являются реактивными компонентами? В приложении node вы должны использовать require(), как показано ниже. Вот пример с react-clipboard:

var Clipboard = require("react-clipboard");

var App = React.createClass({

  render: function() {

    return (
      <div>
        <Clipboard value='some value' onCopy={some function} />
      </div>
    );
  },

Но что вы делаете, чтобы добиться этого в приложении Rails?

Несмотря на то, что пакет включен в конвейер ресурсов rails, компонент React Clipboard недоступен в JSX. Как сделать его доступным?


person Dave Pekar    schedule 25.08.2016    source источник


Ответы (1)


Невозможно сделать это напрямую, используя только рельсы.

Чтобы иметь возможность использовать require("react-clipboard"), одним из решений (менее навязчивым) будет использование комбинации rails, react-rails и browserify, как описано здесь:

http://collectiveidea.com/blog/archives/2016/04/13/rails-react-npm-without-the-pain/

и здесь

https://gist.github.com/oelmekki/c78cfc8ed1bba0da8cee

Я не стал повторно вставлять весь пример кода, так как он довольно длинный и подвержен изменениям в будущем.

person borisrorsvort    schedule 31.08.2016
comment
Спасибо, что уладили это для меня, @borisrorsvort! :) - person Dave Pekar; 01.09.2016