Javascript 如何在Rails应用程序中实现过滤器而不重新加载页面?

Javascript 如何在Rails应用程序中实现过滤器而不重新加载页面?,javascript,ruby-on-rails,ajax,reactjs,fetch,Javascript,Ruby On Rails,Ajax,Reactjs,Fetch,我正在尝试在我的Rails应用程序中实现一个过滤器特性,我需要关于如何实现它的建议/想法 我想能够过滤结果,并显示在同一页上(就像旅游网站:skyscanner,liligo等)。 当你在这些网站上勾选一个方框时,结果会立即更新 这是页面的外观:结果页面 我最初的想法是将EventListener添加到每个框中,并使用get请求从我的api获取数据。每次勾选一个框时,它都会触发一个带有用户选择的每个参数的请求。然后它会将结果插入它旁边的div中。 但是做那样的事感觉真的很混乱 还有什么更好的选

我正在尝试在我的Rails应用程序中实现一个过滤器特性,我需要关于如何实现它的建议/想法

我想能够过滤结果,并显示在同一页上(就像旅游网站:skyscanner,liligo等)。 当你在这些网站上勾选一个方框时,结果会立即更新

这是页面的外观:结果页面

我最初的想法是将EventListener添加到每个框中,并使用get请求从我的api获取数据。每次勾选一个框时,它都会触发一个带有用户选择的每个参数的请求。然后它会将结果插入它旁边的div中。 但是做那样的事感觉真的很混乱

还有什么更好的选择


我已经看到,这些网站中的大多数都使用React来实现这一点。处理这类功能有很大帮助吗?

您可以使用
javascript和jquery,正如本文所建议的那样

gem用于过滤器


您可以检查
Filterrific

您可以按照本文的建议将
javascript与jquery一起使用

gem用于过滤器


您可以检查
Filterrific

是的,事实上,React对我来说很自然,因为您可以使用SetState(),而无需重新加载页面,如中所述

setState()将组件状态的更改排入队列,并告知React需要使用更新的状态重新呈现此组件及其子组件。这是用于更新用户界面以响应事件处理程序和服务器响应的主要方法


如果您使用rails,我建议您使用Jquery,这样就可以充分利用Ajax及其灵活性,

是的,事实上React对我来说非常自然,因为您可以使用SetState(),而无需重新加载页面,如中所述

setState()将组件状态的更改排入队列,并告知React需要使用更新的状态重新呈现此组件及其子组件。这是用于更新用户界面以响应事件处理程序和服务器响应的主要方法


如果您使用rails,我建议您使用Jquery,并充分利用Ajax及其灵活性,

在react中没有“一种合适的方法”来实现这一点。react中有许多模式,但有一个共同的想法——将道具(数据、方法)从父对象传递给子对象

最简单的情况下您可以在
组件(父组件)中有一个
(子组件)。
(复选框)中的任何更改都可以保存在组件状态并用于数据获取。获取的数据(也保存在状态中)可以作为道具传递给子级。简化的
渲染
组件的功能可以如下所示:

render() {
  return (
    <div id="page_layout">
      <div id="filters">
        <input onChange={/* event handler */} />
        <input {/* next filter */} />
      </div>
      <Results data={this.state.results} />
    </div>
  )
}
render(){
返回(
)
}
在事件处理程序中使用
setState
将强制对
组件重新排序(视图更新)。几乎所有react-todo示例应用程序都使用本地状态进行过滤,但通常使用按钮

一个事件处理程序可用于所有复选框,可从
setState
callback[然后]“激发”提取。使用redux可以用作两个(或多个)并行组件(无父/子)的公共(一个真实来源)状态。。。你必须学习许多反应模式/技巧。。。这个问题太宽了


可以是一个很好的开始,但当然有一些不同。F.e.只有一个输入,值用于直接获取,而不保存在状态中。

在react中没有“一种正确的方法”来实现这一点。react中有许多模式,但有一个共同的想法-从父级到子级单向传递道具(数据、方法)

最简单的情况下您可以在
组件(父组件)中有一个
(子组件)。
(复选框)中的任何更改都可以保存在组件状态并用于数据获取。获取的数据(也保存在状态中)可以作为道具传递给子级。简化的
渲染
组件的功能可以如下所示:

render() {
  return (
    <div id="page_layout">
      <div id="filters">
        <input onChange={/* event handler */} />
        <input {/* next filter */} />
      </div>
      <Results data={this.state.results} />
    </div>
  )
}
render(){
返回(
)
}
在事件处理程序中使用
setState
将强制对
组件重新排序(视图更新)。几乎所有react-todo示例应用程序都使用本地状态进行过滤,但通常使用按钮

一个事件处理程序可用于所有复选框,可从
setState
callback[然后]“激发”提取。使用redux可以用作两个(或多个)并行组件(无父/子)的公共(一个真实来源)状态。。。你必须学习许多反应模式/技巧。。。这个问题太宽了


可以是一个很好的开始,但当然有一些不同。F.e.只有一个输入,值用于直接获取,而不保存在状态中。

这可能会对您有所帮助。您的问题是如何接近前端的js?或者如何在后端执行搜索?也不二者都还有什么?您是否尝试过使用AngularJs、Angular.IO、Jquery等框架或库。。有可能与他们达成解决方案。因为它们有功能,可以在后台发出请求而不必重新加载网站。这可能会对你有所帮助。你的问题是如何在前端接近js?或者如何在后端执行搜索?也不二者都还有什么?您是否尝试过使用AngularJs、Angular.IO、Jquery等框架或库。。有可能与他们达成解决方案。因为它们有功能,可以在后台发出请求,而无需重新加载网站。