터보링크를 핫와이어로 업그레이드/마이그레이션하는 방법
13410 단어 railstutorialhotwireturbolinks
Render form errors
곧 출시될 Rails 7 릴리스에서는 핫와이어와 자극이 새로운 Rails 프로젝트의 기본 JavaScript 설정이 될 것입니다. 최신 단계로 기존 레일 애플리케이션의 속도를 높이려면 아래 가이드가 터보링크에서 핫와이어로 마이그레이션하는 데 도움이 될 수 있습니다.
Devise 및 Rails UJS에 대한 참고 사항
장치를 핫와이어로 사용하려면 몇 가지 변경 사항이 필요합니다. 실용적인 가이드는 GoRails episode을 확인하십시오.
현재로서는 Rails UJS 여전히 Hotwire와 공존할 수 있습니다. 아래 가이드는 Rails UJS가 설치되어 있다는 가정 하에 작성되었습니다. UJS와 완전히 작별하고 싶다면 이것을 확인하십시오Drifting Ruby episode.
설치
gem을 설치합니다hotwire-rails. gem은 다음을 설치할 래퍼입니다.
이미 Stimulus를 설치했다면, yarn이나 npm을 사용하여 패키지를 제거하세요. 예:
yarn remove stimulus@^2.0.0
.바꾸다
# old
gem 'turbolinks'
# new
gem 'hotwire-rails'
실행
./bin/bundle install
실행./bin/rails hotwire:install
application.js
에서 모든 터보링크 참조를 제거합니다.// old
require("turbolinks").start()
// new
import "@hotwired/turbo-rails"
1. 경기부양책 수입 대체
이미 Stimulus JS가 설치된 경우 기존 자극 컨트롤러를 업데이트해야 합니다. 가져오기 라이브러리를
@hotwired/stimulus
로 설정합니다.// old
import { Controller } from "stimulus"
//new
import { Controller } from "@hotwired/stimulus"
2. 터보링크 네임스페이스를 터보로 교체
앱에 터보링크 참조가 포함되어 있는지 확인하고 새 터보 네임스페이스로 교체합니다.
예를 들어:
// old
document.addEventListener('turbolinks:load', ...)
// new
document.addEventListener('turbo:load', ...)
<!-- old -->
<%= link_to path, data:{turbolinks: false} do %>
<!-- new -->
<%= link_to path, data:{turbo: false} do %>
# old
Turbolinks.visit(location)
# new
Turbo.visit(location)
3. 원격 양식 비활성화
모든 원격 양식을 비활성화하려면 turbo-rails에 언급된 대로
application.rb
에서 구성을 설정하십시오.config.action_view.form_with_generates_remote_forms = false
또는
local: true
를 추가하여 모든 형식을 하나씩 변경할 수 있습니다.<!-- old -->
<%= form_with model: @task, url: task_path(@task), method: :put do %>
...
<% end %>
<!-- new -->
<%= form_with model: @task, url: task_path(@task), method: :put, local: true do %>
...
<% end %>
4. 렌더링 양식 오류
4.1. GET 경로의 양식
/new
또는 /edit
페이지에서 좋아요페이지에서 오류를 렌더링하기 위해 else-leg에서 양식을 렌더링할 때
status: unprocessable_entity
를 추가합니다.# old
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: 'Task created.'
else
render :new
end
end
# new
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: 'Task created.'
else
render :new, status: :unprocessable_entity
end
end
4.2 모달 형식
3.1단계에서
:unprocessable_entity
접근 방식을 사용하면 모달에 표시되는 양식에 대해 작동하지 않습니다. 이것은GoRails episode 심층 솔루션에 대해 자세히 설명합니다. status: :unprocessable_entity
대신 새로운 turbo_stream 형식을 사용하여 오류를 렌더링하십시오. Turbo_stream.erb는 양식 ID를 찾아 새 HTML 템플릿으로 바꿉니다.이것은 또한 기존
js.erb
템플릿을 새로운 turbo_stream 형식으로 교체하기에 좋은 시기입니다.# old
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: 'Task created.'
else
render :new
end
end
# new
def create
@task = Task.new(task_params)
if @task.save
redirect_to tasks_path, notice: 'Task created.'
else
respond_to { |format| format.turbo_stream }
end
end
다음으로 모달 폼에 id를 추가합니다. dom_id 도우미here에 대해 읽어보세요.
<!-- old -->
<%= form_with model: @task) do |f| %>
...
<% end %>
<!-- new -->
<%= form_with model: @task, id: dom_id(@task) do |f| %>
...
<% end %>
마지막으로 컨트롤러의 작업 이름과 일치하는 보기 폴더에 새 파일을 추가합니다.
create.turbo_stream.erb
<%= turbo_stream.replace "new_task", partial: "tasks/form", task: @task %>
new_task
는 dom_id(@task)에 의해 생성된 폼의 id를 나타냅니다. "tasks/form"
는 처음에 모달@task
는 양식5. .js.erb를 turbo_stream.erb로 교체
핫와이어 및 대체 접근 방식을 사용하여 페이지의 콘텐츠를 업데이트합니다. 새로운 turbo_stream 접근 방식의 이점을 얻고자 합니다.
읽어 주셔서 감사합니다.
질문? 피드백? 알려줘요 :)
Reference
이 문제에 관하여(터보링크를 핫와이어로 업그레이드/마이그레이션하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thomasvanholder/how-to-upgrade-migrate-turbolinks-to-hotwire-3e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)