Ruby on rails 带有ReactJS的Rails。有什么好处? 我正在创建应用程序内部的管理面板,我希望能够在不刷新页面的情况下添加/删除/编辑项目。我想到的第一件事是AJAX。所以我实现了它,它运行得很好

Ruby on rails 带有ReactJS的Rails。有什么好处? 我正在创建应用程序内部的管理面板,我希望能够在不刷新页面的情况下添加/删除/编辑项目。我想到的第一件事是AJAX。所以我实现了它,它运行得很好,ruby-on-rails,reactjs,Ruby On Rails,Reactjs,我要做的是在删除一个项目后手动删除相应的div,在创建一个项目后添加div,等等 过了一段时间,我读了关于ReactJS(以前听说过,但从未使用过),以及它可以做的事情——特别是获取数据库和更新视图(但仅限于更改的事情)。我的问题是-我需要这个吗 在这种情况下,使用像react这样的库有什么好处 PS我真的发现很难让我的头脑了解所有这些可用的东西,为我的使用做好准备,因为不久前我开始了我的RoR之旅。有什么建议吗?以我的经验,React可以很好地与Rails配合使用,它将允许您将前端解决方案组件

我要做的是在删除一个项目后手动删除相应的
div
,在创建一个项目后添加
div
,等等

过了一段时间,我读了关于ReactJS(以前听说过,但从未使用过),以及它可以做的事情——特别是获取数据库和更新视图(但仅限于更改的事情)。我的问题是-我需要这个吗


在这种情况下,使用像react这样的库有什么好处


PS我真的发现很难让我的头脑了解所有这些可用的东西,为我的使用做好准备,因为不久前我开始了我的RoR之旅。有什么建议吗?

以我的经验,React可以很好地与Rails配合使用,它将允许您将前端解决方案组件化。请记住,您也需要学习Flux,如果您决定走这条路,我建议您开始使用其中一种方法将React Flux与Rails集成

无论如何,我认为对于您的问题,最好且更便宜的解决方案(就学习曲线而言)应该是使用TurboLink。 选中此项,您将清楚了解TurboLink的优势

您描述的解决方案可以通过以下步骤构建:

为您的资源(在我的案例中为项目)创建控制器:

将创建表单移动到另一个分部并将其设置为远程:

= form_for project, remote: true do |form|
  = form.text_field :name
  = form.submit :save
在“索引”视图中,渲染部分:

.new-project-container
  = render 'path_to_my_new_project', project: @project
.project-list-container
  = render 'path_to_my_listed_projects_partial', projects: @projects
将创建端点添加到控制器

class ProjectsController < ApplicationController
  before_filter :set_projects, only: :index

  def index
    @project = Project.new
  end

  def create
    format.js do
      Project.create(project_params)
      set_projects
    end
  end

  private

  def set_projects
    @projects = Projects.all
  end

  def project_params
    params.require(:project).permit(:name)
  end
end
创建响应JS格式的端点:

  def destroy
    format.js do
      project = Project.find(params[:id])
      project.destroy
      set_projects
    end
  end
还有destroy.js.erb

$('.project-list-container').html("<%= j render 'path_to_my_listed_projects_partial', projects: @projects%>")
$('.project list container').html(“”)

我认为这种方式比您的更干净。

“使用react-here有什么好处”-您的意思是,除了不必手动管理div之外?这还不够吗?
$('.new-project-container').html("<%= j render 'path_to_my_listed_projects_partial', project: Project.new%>")
$('.project-list-container').html("<%= j render 'path_to_my_listed_projects_partial', projects: @projects%>")
%table
  %thead
    %tr
      %th Name
      %th
  %tbody
    - projects.each do |project|
      %tr
        %td= project.name
        %td= link_to :delete, project, method: :delete, remote: true
  def destroy
    format.js do
      project = Project.find(params[:id])
      project.destroy
      set_projects
    end
  end
$('.project-list-container').html("<%= j render 'path_to_my_listed_projects_partial', projects: @projects%>")