【问题标题】:React with Rails 5.1 Calling Database Objects into React ComponentsReact with Rails 5.1 将数据库对象调用到 React 组件中
【发布时间】:2017-08-15 12:13:20
【问题描述】:

如何将 Rails 5.1 数据库对象调用到 React 组件中?

例如,在标准 Rails 视图中,我可以使用 @object 调用对象,假设我可以访问在控制器中配置的对象。

在 Rails 5.1 中,使用启用了 Webpacker 的 React 功能,我如何将 Rails 数据库对象调用到 React 组件中?

我想在 React 组件中映射数据库中的所有 @objects。

使用 react-rails gem,您可以使用类似这样的方法来访问 jsx 文件中的这些对象:

 <%= react_component('Component', props: @objects) %>

如何在不使用 gem 并且仅使用基本 Rails 5.1/Webpacker React 设置的情况下做类似的事情?

我的理解是它使用这样的 ruby​​ 标签:

<%= javascript_pack_tag "Component" %>

【问题讨论】:

    标签: ruby-on-rails reactjs components ruby-on-rails-5.1


    【解决方案1】:

    在要渲染 React 组件的视图模板中:

    <%= javascript_pack_tag 'Component' %>
    
    <%= content_tag :div,
      id: 'objects_data',
      data: @objects.to_json do %>
    <% end %>
    

    这会渲染这个 html 标签

    <div id="objects_data" data="[{"id": 1, "created_at": .....}]"></div>
    

    然后在你的 JS 文件中

    document.addEventListener('DOMContentLoaded', () => {
      var objectsDataTag = document.getElementById('objects_data')
      const objectsData = JSON.parse(objectsDataTag.getAttribute('data'))
    })
    

    现在您的 JSON 数据存储在 objectsData 常量中。

    我的理解是&lt;%= react_component('Component', props: @objects) %&gt; 也是这样工作的。

    这在webpacker docsthis blog post 中有更详细的介绍

    【讨论】:

    • 谢谢!我会试试的。
    • @JohnOHFS 我刚刚添加了一个更新,表明 JSON 解析应该包含在一个 DOM 加载事件侦听器中,并且还添加了一个指向博客文章的链接,该链接帮助我为自己的项目解决了这个问题。希望这会有所帮助!
    • @m-simon-borg 现在如果我将所有对象数据导入视图,例如使用对象控制器中的 (at)objects = Object.all,如果我有数千个对象条目我的 Rails 数据库,这不会尝试全部加载它们并降低性能吗?是否有最佳实践方法来限制该 html 标记中的数据加载量?
    • @JohnOHFS 是的,它会的,但是主要的减速不会是呈现 HTML 标签中的数据,而是你之后用它做的所有事情。在任何情况下,最好将发送到视图的数据限制为仅需要的数据。如果您只需要一些记录,请不要发送所有记录。这应该在控制器中通过调用模型范围来缩小查询范围,或者通过使用分页将记录索引分解成更小的块来完成(参见 kaminari gem)
    • @m-simon-borg 知道了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2018-03-28
    • 2016-06-16
    • 2017-12-15
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多