Как правильно разработать приложение Ruby on Rails с помощью React? - PullRequest
0 голосов
/ 29 апреля 2019

Я делаю какой-то проект с использованием Ruby on Rails с React.Я использую react-rails драгоценный камень.У меня есть несколько вопросов о том, как правильно спроектировать архитектуру приложений Rails и React.Мой вопрос в основном о передаче данных между Rails и React.

Я знаю, что в основном есть два подхода к этому.Первый и наиболее распространенный способ - это отдельный API в Rails и приложение внешнего интерфейса в React.Это приносит некоторые плюсы и минусы.Мне пришлось бы разрабатывать и поддерживать два отдельных приложения, но в будущем я мог бы легко повторно использовать существующий API для других вещей, таких как мобильное приложение.Таким образом, мой интерфейс React запрашивает у Rails API данные.

Второй способ и способ, который я выбрал, - это разработка монолитного приложения с использованием встроенного в Rails webpacker, react-rails или react-on-rails.Таким образом, я могу просто получить данные в моем контроллере Rails

@foo = Model.find(id)

и передать их моему компоненту React в представлении

=react_component("Foo", {foo: @foo})

, но проблема началась, когда я получил еще немногосложная модель с большим количеством зависимостей.Например, допустим, у меня есть модель:

class Foo < ApplicationRecord
  belongs_to: :user
  has_many: :bar #which is some nested resources

, и теперь я хочу создать индексную страницу модели Foo, которая будет отображать все данные Foo's, user и подключенные к ним Bar's.В чистом приложении Rails я могу просто спросить в контроллере @foo, а позже просто введите @foo.user.nick.Но когда я использую реагирование, мне нужно получить всю эту информацию в моем контроллере, а затем передать ее компоненту React с помощью props, что, на мой взгляд, вызывает много беспорядка.

И вот мой вопрос: как правильно передавать данные между Rails и React?

1 Ответ

0 голосов
/ 12 мая 2019

Самым чистым вариантом, как вы говорите, является выборка в контроллере и передача с использованием реквизита.

Если вы делаете это как реквизиты, лучший способ - использовать as_json* Rails.Метод 1005 * с возможностью цепочки:

  • только
  • , за исключением
  • методов
  • включают

Ипример:

@my_component_data = @foo.as_json(include: { user: { only: [:id, :name, :nick] } }

В конце концов вы можете выбрать что-то вроде ActiveModelSerializer, но я лично предпочитаю избегать потери скорости и дополнительной сложности, другие клянутся этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...