根据我在 rails/react 应用程序上的 api 调用状态更新我的视图

Posted

技术标签:

【中文标题】根据我在 rails/react 应用程序上的 api 调用状态更新我的视图【英文标题】:Update my view depending on the status of my api call on a rails/react app 【发布时间】:2019-10-18 00:48:42 【问题描述】:

我有一个使用 react 作为前端的 Rails 应用程序。从我的 Rails 控制器中,我正在调用基于浏览器的 api。通过 Watir 和控制器内部的一些“放置”,我可以在终端内获取呼叫状态。例如,在我的终端中,我会看到“Loading 1%...”“Loading 10%”等...直到完成。 我想要做的是向我的前端应用程序显示这个值。对 Rails 很陌生,不知道从哪里开始。为了点击 call_api(username) 方法,我从前端的按钮进行 Ajax 调用。到目前为止,一切都运行良好。我唯一想补充的是我在客户端的通话状态。

我曾尝试使用 gem gon,但问题是我的整个应用程序都基于我的根路由“/”,所以如果我的 index 方法是这样的,而我的 call_api 方法是这样的

  def index
     @status = "started"
     gon.watch.status = @status
   end
  def call_api(username)
    @status = "new value for test"
    gon.watch.status = @status
    until @status == "Finished"
      @status = @browser.span(class: "monoFont").text
      puts "status" + @status
      sleep 1
    end
   end

当我进入浏览器控制台并尝试 console.log(gon.status) 时,我仍然会得到“已启动”的值,因为我的应用程序仍在索引路由上。 可能有更好的方法。非常感谢任何有关如何进行的帮助和建议。谢谢

【问题讨论】:

我没完全明白!当您的反应组件确实安装您的值时,您的值已启动,然后在单击按钮并调用 API 后您想要更新值?这是你要做的吗? 为了从我的控制器中使用 API,我需要抓取一个网站。当 API 运行时,使用 watir 并抓取 API 的网站,我得到了一些关于状态的信息(例如“加载 10%”、“加载 20%”等)。此状态信息使用“puts”显示在我的终端中。我想要做的是在我的视图上显示它。让事情变得复杂的是,我使用 ajax 调用来调用控制器方法 (def call_api(username)),所以我能得到的唯一更新是我放入 ajax 成功函数或 ajax 错误函数中的内容。 有没有办法从我的控制器向我的窗口传递一个 js 变量?知道抓取 api 网站的方法不是我显示我的反应前端的索引方法 如果我没记错的话,当 API 在网络上进行一些抓取时,您需要在视图中不断更新状态。所以我认为您可能需要网络套接字或类似的东西? 因为您的 API 一直在运行,并且您需要在视图中进行实时更新。看看网络套接字,让我知道结果。 【参考方案1】:

如果我没记错的话,当 API 在网络上进行一些抓取时,您需要在视图中不断更新状态。所以我认为你可能需要 web socketing 或类似的东西,因为你的 API 是连续运行的,你需要在你的视图中进行实时更新。看看网络套接字。

【讨论】:

以上是关于根据我在 rails/react 应用程序上的 api 调用状态更新我的视图的主要内容,如果未能解决你的问题,请参考以下文章

Rails + React 应用程序页面需要重新加载才能呈现 React

无法在 Rails + React App 中验证 CSRF 令牌

Rails + React-I18next:找不到语言环境/

Rails 6,React,Rack-Cors [重复]

在 Rails + React 应用程序中 JWT 用于 Auth 有啥用

Rails+React/Next.js:如何存储代码块以保持格式化?