javascript - 在哪里存储ajax请求的参数

标签 javascript reactjs redux

我有一个包含许多数据表的应用程序。每个表都有一个排序和过滤器。 对 API 的请求如下所示:

axios.get('path/to/api/users', { params: {
  sort: {
    byField: 'name',
    orderBy: 'DESK'
  },
  filters: {
    status: 'active',
    country: 'spain'
  },
  search: 'pablo'
}});

我的状态结构如下所示:

entities: {
  users: {
    byId: {
      0: {},
      1: {},
    },
    allIds: [0, 1]
  },
  posts: {
    byId: {
      0: {},
    },
    allIds: [0]
  }
}

我有一个问题:a 应该在哪里存储每个表的 params 对象? 在容器中(this.state)还是在另一个 reducer 中?或者在 url 查询字符串中?

最佳答案

我肯定会保留过滤/排序/分页数据以及存储中的数据(在父对象/reducer 下)。

此信息经常显示 - 当前页面、排序顺序、过滤条件等可能无论如何都会出现在 UI 中。

此外,此信息与数据本身具有内聚性,即它们一起变化。当您获取更多页面时,最后获取的页面将与最后一个页面数据一起更新。将它们放在一起很有意义。

然后可以根据这些数据构建查询字符串。

更新:“如何更好地构造 reducer ?”

好吧,正如我所说,我会将数据和元数据一起保存在某个父对象中。像这样:

const myReducer = (state = {
    data: {...}, 
    metadata: {
        paging: {...}, 
        sort: {...}, 
        filters: [], 
        search: ''
    }
}, action) => ...

这样,数据和元数据一起更改,而如果需要这样的结构更改,则它们的结构可以独立更改。

编辑:LRU 考虑

如果您想保留 N 个版本,则需要将它们存储在不可变的 LRU 实现中。如果您能找到一个(或制作一个),那么您将如何使用它:

const myReducer = (state = {
    versions: new ImmutableLRU()
}, action) => ... 

reducer 主体然后将对象结构设置到 LRU 中,无论它是如何使用的。可能是这样的:

return {...state, versions: versions.put(JSON.stringify(metadata), data)};

这会将 LRU 键设置为元数据属性的值,您可以相应地查找缓存结果。

关于javascript - 在哪里存储ajax请求的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47854236/

相关文章:

javascript - React/Redux - 处理错误和错误代码

reactjs - React-Redux 从组件调度操作

javascript - Jquery 搜索一个类,然后在其后面添加一个

javascript - 在 JavaScript 中将 int64 值转换为 Number 对象

javascript - 如何在 Node.js 中关闭文件对话框?

JavaScript - 将参数添加到成功回调

javascript - P5.js 中的随机球速

reactjs - 在React应用程序中动态添加样式属性到CSS类

node.js - Socket.io - React : How to retrieve saved socket. io 数据(MongoDB)?

javascript - mapDispatchToProps 中的链接粗箭头让我出错