我正在尝试通过webpacker集成rails并做出反应,但我不知道如何从控制器传递示例@post = Post.all
以反应组件道具。我必须通过api或其他方式做到这一点?
答案 0 :(得分:3)
通过添加内容标记来查看我想要渲染反应组件的位置并将道具作为属性传递。
<%= content_tag :div,
id: "appointments_data",
data: @appointments.to_json do %>
<% end %>
然后解析数据并添加它做道具
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')),
)
})
答案 1 :(得分:1)
这是另一种方式:
some_views.html.erb
<%= javascript_tag do %>
var appointments = <%= raw(@appointments.to_json) %>
<% end %>
some_react_components.js
document.addEventListener('DOMContentLoaded', () => {
const data = window.appointments
ReactDOM.render(
<Appointments appointments={data} />,
document.body.appendChild(document.createElement('div')),
)
})