【问题标题】:Generate a unique id in react that persist在持续的反应中生成一个唯一的 id
【发布时间】:2021-03-13 22:50:31
【问题描述】:

我需要为使用我的 react 应用的每个客户端保留一个唯一标识符。

这样做会重新生成一个随机字符串(我想要的),但每次刷新时都会这样做,这不是我想要的

  const [id] = useState(Math.random().toString(36).substr(2, 8));

我在 lodash 中找到了 uniqueId() ,但我担心 id 在多个客户端中不会是唯一的,因为它只提供一个唯一的 Id 并在每次调用时递增它(1、2、3...)

  const [id] = useState(_uniqueId());

是否有某种 _uniqueId 生成随机字符串并通过页面刷新持续存在?

【问题讨论】:

  • 如果您需要它通过页面刷新持续存在,那么您需要将它存储在某个地方。将其存储在数据库中是保证它会持续存在的最佳方式。但是,如果您不能使用后端服务,您可能会考虑使用本地存储或 cookie。另外,请参阅stackoverflow.com/questions/105034/how-to-create-a-guid-uuid,了解如何生成可能唯一的 ID。
  • @RichMcCluskey 我只需要它作为在帐户创建过程中识别客户的临时方法,一旦我想出一种方法来创建一个不会改变的唯一 ID,我计划将它与 Context 一起存储刷新时。
  • 感谢您的链接,我已经用 Math.random() 寻找错误的方向
  • 以备不时之需。 npmjs.com/package/uuid
  • 如果你想要一个唯一的 ID 保证在客户端之间是唯一的,你应该在服务器端生成和存储这个 ID,而不是客户端。

标签: javascript reactjs lodash


【解决方案1】:

另一种为同一客户端生成相同的临时 ID 而无需存储它的方法是使用浏览器指纹。

例如,您可以获取用户代理、客户端时区和屏幕分辨率,对其应用一些哈希函数并将其称为 ID。

有更高级的指纹识别方法可以减少两个不同用户拥有相同 ID 的机会,但绝不会是 0%。

您可能还想为此使用一些库,例如 https://github.com/fingerprintjs/fingerprintjs

【讨论】:

  • 这是一个很好的解决方案,我可能会在以后的项目中使用它,谢谢
【解决方案2】:

我认为没有内置或开箱即用的解决方案可以在反应中自动生成唯一的 id。你有两个问题要解决。

  • 如何生成唯一 ID。使用uuid 已经解决了这个问题。
  • 以及如何持久化它。

您可以根据需要使用大量存储空间。假设您希望将数据存储在客户端中,您可以在其中保留数据。

同样,这取决于您的用例。因此,请仔细检查它们是否符合您的要求。

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2012-03-21
    • 2012-07-20
    相关资源
    最近更新 更多