使用Rails6、TypeScript和React进行环境配置

使用Rails6、TypeScript和React进行环境搭建。
在界面上展示Hello World字符串。
不使用Docker。
要在Rails中引入React,可以使用著名的gem react-rails,但我打算使用rails6的默认选项Webpacker来使用React。

环境

Rails 版本为 6.1.4.4,Ruby 版本为 3.1.0,Webpacker 版本为 5.0,Node 版本为 16.13.0。

创建一个新的 Rails 项目

首先,我们将创建一个Rails应用程序。我们选择了固定版本为6.1.4.4。

rails _6.1.4.4_ new myapp

当Node版本太新时,在webpack编译时可能会出现错误,因此我们将其固定为16.13.0版本。

nodenv local 16.13.0

引入React

通过使用Rails命令引入React。

bin/rails webpacker:install:react

引入TypeScript

使用Rails命令引入TypeScript。

bin/rails webpacker:install:typescript

页面编辑

让我们自定义主页。
创建home控制器和index动作。

bin/rails g controller home index

当访问根目录时,让home控制器的index动作执行。

Rails.application.routes.draw do
  root 'home#index'
end

创建 React 组件

我們將實現在首頁上顯示的React組件。
這次我們只需要一個組件,其功能是顯示一個”Hello World”的字符串。

import * as React from 'react'

export default function App() {
    return (
        <h1>Hello World</h1>
    )
}

React入口文件的编辑

将先前创建的组件与DOM进行关联。
在前一个步骤中,已经自动创建了一个名为hello_react.jsx的文件,我们将对其进行编辑。
将hello_react.jsx重命名为index.js,并将其挂载到ID为app的DOM上。

import React from 'react'
import { createRoot } from 'react-dom/client'
import App from './App'

document.addEventListener('DOMContentLoaded', () => {
  const app = document.getElementById('app')
  const root = createRoot(app)
  root.render(<App />)
})

应用程序.html.erb

通过使用javascript_pack_tag来加载之前的index.js。

<!DOCTYPE html>
<html>
  <head>
    <title>Myapp</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <div id="app"></div>
    <%= javascript_pack_tag 'index' %>
    <%= yield %>
  </body>
</html>
undefined

请提供更具体的句子或段落,以便我能更好地为您提供中文的同义转述。

请用中文将以下内容进行改述,只需要提供一个版本:

1. https://zenn.dev/naoki0722/articles/272ef57c6dafba
这个网址是指向naoki0722在Zenn上发布的一篇文章。详情请点击链接查看。

2. https://zenn.dev/masanao/articles/de8cb66bb6e417
这个链接是指向masanao在Zenn上发布的一篇文章。点击链接以获取更多详细信息。

3. https://www.youtube.com/watch?v=oyjzi837wME
这个网址指向一个YouTube视频,点击链接即可观看。

广告
将在 10 秒后关闭
bannerAds