【问题标题】:Routing a React component to a rails partial?将 React 组件路由到 Rails 部分?
【发布时间】:2019-03-17 03:43:34
【问题描述】:

我的 Rails 4.2 应用程序中有一个 React 组件,它被设置为 NewContactFormcontact/new,并且以这种方式运行良好。但是,我一直希望将其注入现有的 Rails 页面(listings/newlistings/edit,均通过 _form 部分呈现),因为此信息与此相关,以便更好地流动。就目前而言,我的路由要求我有一个将组件渲染到的确切路径;有什么方法可以让我在部分中渲染我的组件吗?我知道这个想法是能够通过应用程序在任何地方注入 React,我只是不确定在这种情况下如何处理路由(除非 views/contacts/new 被转换为部分并传入?)。

app.jsx:

import React from 'react'
import { Switch, Route } from 'react-router-dom'
import WarehouseReport from './reports/warehouse'
import NewContactForm from './contacts/new-contact-form'

export default function App() {
  return <Switch>
    <Route exact path='/:account_id/warehouses/:warehouse_id/warehouse_report' component={ WarehouseReport }/>
    <Route exact path='/:account_id/contacts/new' component={ NewContactForm }/>
  </Switch>
}

【问题讨论】:

    标签: reactjs react-router ruby-on-rails-4.2 partials


    【解决方案1】:

    您似乎将组件内的路由器与此处的 rails 路由器混淆了。

    此处指定的路由将处理组件内部的路由。这意味着单击组件内的任何内容都会在组件本身中呈现其他内容,但不会影响您的 rails 服务器提供的路由。

    组件需要自己的路由的假设场景是您有一个多步骤表单的组件,并且您正在使用路由器来处理您所在的步骤。

    要在局部内部渲染组件,似乎最简单的方法是使用 react-rails 和 react helpers 的组合

    1. 将 react-rails gem 添加到您的设置中 gem 'react-rails'

    2. 捆绑所有 React 组件,以便它们可供使用。

    3. 使用 react_component 助手在你的局部渲染组件:

      &lt;%= react_component('ComponentName', {prerender: true}) %&gt;

    【讨论】:

    • 现在我正在通过webpacker 在我的 Rails 应用程序中生成 React。添加新的 gem 会影响我现有的组件吗?
    • 我个人没有使用过这种方法,但我确实不了解 webpacker 的作用。它是否会在 packs 文件夹中为您创建一个包含组件的新 js 文件,其中包含您构建时组件文件的文件名?
    • 不,它只是将 React 的静态模块捆绑器创建到资产管道中。 botreetechnologies.com/blog/…
    • 但是根据您链接的文章,在构建后确实会在 javascript/packsjavascript/components 文件夹中创建一个应用 jsx 包。您可以使用 webpacker 助手调用它:例如 &lt;%= javascript_pack_tag 'component_name' %&gt;
    • 是的。您可以在 React 中制作 2 个独立的组件,而无需路由器。然后只需使用 webpacker 帮助器在您需要的地方调用每一个。
    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2020-01-03
    • 2016-12-29
    • 2020-10-15
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    相关资源
    最近更新 更多