【问题标题】:Redux: local state id's and/or api uuid'sRedux:本地状态 id 和/或 api uuid
【发布时间】:2017-01-10 08:02:15
【问题描述】:

我将 Redux 与使用 UUID 的 REST api 一起使用。存储状态的常用模式是使用 id 作为对象的键:

entities: {
  articles: {
    1: {
      id: 1,
      title: 'Some Article',
      author: 1
    },
    2: {
      id: 2,
      title: 'Other Article',
      author: 1
    }
  },
  users: {
    1: {
      id: 1,
      name: 'Dan'
    }
  }
}

我将如何在此使用 api 中的 UUID?我希望能够创建一个新实体,而不必先从服务器请求 UUID(用于离线功能)。

我应该:

  1. 使用本地ID,将UUID保存在实体的_id属性中,并且只在发出API请求时使用?这似乎是最简单的方法,虽然感觉多余,而且在某些情况下我可能不得不在实体中搜索某个 _id
entities: {
  articles: {
    1: {
      _id: 'UUID',
      title: 'Some Article',
      author: 1
    },
    2: {
      id: 'UUID',
      title: 'Other Article',
      author: 1
    }
  },
  users: {
    1: {
      _id: 'UUID',
      name: 'Dan'
    }
  }
}
  1. 仅使用 API 中的 UUID,并且在创建新项目时使用排序(如果是临时 id)直到 API 调用得到解决?这似乎是最好的方法,虽然我不确定如何更改 id,这也感觉不对(因为它们是 id)。
entities: {
  articles: {
    'UUID': {
      _id: 'UUID',
      title: 'Some Article',
      author: 'UUID'
    },
    'UUID': {
      _id: 'UUID',
      title: 'Other Article',
      author: 'creating'
    }
  },
  users: {
    'UUID': {
      _id: 'UUID',
      name: 'Dan'
    },
    'creating': {
      name: 'Stan'
    }
  }
}
  1. 用别的方法吗?

【问题讨论】:

  • 也许你可以通过'node-uuid'模块在客户端生成uuid
  • @Utro 这就是我最初的想法,但它似乎是一种不寻常的方法,具有一些安全性和性能影响。
  • 你想出解决方案了吗?
  • @BenLime 我目前正在使用 2 号下的方法。当 id 从服务器返回时,我用服务器中的实体替换带有临时 id 的实体。
  • @BenLime 这绝对是笨重的!如果您找到一个很好的解决方案,请务必在此处发布答案;)

标签: javascript reactjs redux


【解决方案1】:

在 API 返回响应之前,我不会将它添加到 Redux 存储中。

在 Vue 中,在给定组件的数据中,我通常有两个(有时更多)根键,其中一个指向我的 Redux 存储中处理数据的部分,另一个通常是 form 或类似的东西,并且 Vue 数据由于绑定而改变。

用户发起添加资源的动作(POST /resources),服务器返回成功响应后,我派出动作addedResource。在此之前,我会发送 addingResource 之类的内容。

这有什么不可行的原因吗?使用自动递增的整数 id 字段与 UUID 应该没有区别。您的数据规范化应该仍然以相同的方式工作。

【讨论】:

  • 这肯定行得通,但我提到的原因是 “我希望能够创建一个新实体,而不必先从服务器请求 UUID。” ,是我需要离线功能。这意味着服务器可能会在很久以后才返回响应,甚至可能在应用重新启动之后。
  • 啊,我明白了,很有趣。您是否考虑过存储在商店的一个单独的、不完整的部分?不确定这样做的含义,我没有遇到您遇到的这个问题,但我敢肯定有人遇到过。
猜你喜欢
  • 1970-01-01
  • 2020-07-22
  • 2021-04-04
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多