如何使用 webpacker 将 Rails 数据放入 React 组件

如何使用 webpacker 将 Rails 数据放入 React 组件

原文:https://medium.com/hackernoon/how-to-get-your-rails-data-into-your-react-component-with-webpacker-647dc63706c9

Photo credit

webpacker gem 给了我们一个简单的方法来使用 JavaScript 库,包括 React,在 Rails 内部使用原生 JS 工具如 yarn 和 Webpack。

如果您使用的是 Rails 5.1 或更高版本,只需运行以下命令,您就可以直接创建一个带有 React 支持的新应用程序:

$ rails new myapp --webpack=react

如果您使用的是旧版本的 Rails (4.2+),您可以安装 webpacker gem,然后运行

$ ./bin/rails webpacker:install$ ./bin/rails webpacker:install:react

然后,您只需将 React 组件放在新创建的 app/javascript/packs 目录中,并在视图中将它们与 javascript_pack_tag 辅助方法一起使用。

但是如果你以前使用过 react-railsreact on railsgem,你可能会想知道如何用 webpacker 将你的 Rails 模型数据放入 React 组件。

react-rails 和 react_on_rails 都提供了一个名为 react_component 的助手方法,您可以在视图中使用它来呈现一个组件并将数据作为道具传递给它。

如果我们仔细观察一下,react_component 方法将 Rails 数据放在页面上 div 的数据属性中:

react_component(‘Appointments’, appointments: @appointments)

如果您检查页面的源代码,您可以看到在一个 div 中加载的数据,数据属性为 react-class 和 react-props:

然后,在页面加载时,使用一些 JavaScript 代码(react_ujs)来解析数据,并将其传递给 react 组件:

默认情况下,webpacker 不提供任何这样的便利方法。

所以我们必须编写自己的代码来做同样的事情。

首先,让我们将数据作为 JSON 放入视图中一个 div 的 data 属性中,我们希望在该视图中呈现 React 组件:

<%= content_tag :div,
  id: "appointments_data",
  data: [@appointments](http://twitter.com/appointments).to_json do %>
<% end %>

如果你使用 HAML,你可以简单地做:

#appointments_data{data: @appointments.to_json}

然后,在加载完所有 DOM 内容后解析数据,并将其传递给约会组件:

document.addEventListener('DOMContentLoaded', () => {
  const node = document.getElementById('appointments_data')
  const data = JSON.parse(node.getAttribute('data')) ReactDOM.render(
    <Appointments appointments={data} />,
    document.body.appendChild(document.createElement('div')),
  )
})

仅此而已!您的数据现在将被传递到 React 组件。

如果你不想这么做,你也可以使用 webpacker-react gem ,它提供了一个 react_component 辅助方法。

在 Github 上查看该示例应用程序的完整代码:

[## learnetto/calreact

calreact - React 和 Rails 5 日历约会应用

github.com](https://github.com/learnetto/calreact/tree/lesson-4.5)

如果你想免费学习如何使用 React with Rails,请查看 Learnetto 上的 免费 React on Rails 教程。

您可能也会喜欢这些文章:

[## 使用 React with Ruby on Rails 5 的 3 种方式

重要更新(2017 年 7 月 6 日):随着 Rails 5.1 的发布,Rails 现在通过…

medium.com](/react-on-rails/3-ways-to-use-react-with-ruby-on-rails-5-1e49171f8eb6) [## ✅每次你建立一个待办事项应用程序,一只小狗🐕死亡😢

你知道当你试图学习一些新的东西,但对构建默认的示例应用程序感到厌倦的时候?

medium.freecodecamp.org](https://medium.freecodecamp.org/every-time-you-build-a-to-do-list-app-a-puppy-dies-505b54637a5d)

原载于learnetto.com

黑客中午是黑客如何开始他们的下午。我们是 T21 家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除