reactjs - Safari 在每次渲染时以不同的顺序渲染数组元素

标签 reactjs safari

我有以下代码:

Object.values(data).map((user) => {
  <div>
    <User key={user.id} user={user} />
  <div>
})

用户可以通过 UI 添加新用户,这些新用户会添加到 data 对象中,从而触发渲染。

它在除 Safari 之外的所有浏览器(Chrome、Edge、IE)上都能正常工作。 (版本13.1.2) 在 Safari 上,几乎每次重新呈现该用户列表都会更改这些用户在 UI 中的显示顺序。

为什么会这样?

最佳答案

没有 JavaScript 标准规定从对象获取键或值应该按特定顺序进行:

根据mdn Object.values

The Object.values() method returns an array of a given object's own enumerable property values, in the same order as that provided by a for...in loop

并遵循 for...in link它说:

A for...in loop iterates over the properties of an object in an arbitrary order (see the delete operator for more on why one cannot depend on the seeming orderliness of iteration, at least in a cross-browser setting).

不能保证特定顺序的原因是 IE,但由于 Safari 是新的 IE,它已经接管了不可预测性的 torch 。

如果项目顺序很重要,您应该将它们存储在数组、Set 或 Map 中。

关于reactjs - Safari 在每次渲染时以不同的顺序渲染数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63383903/

相关文章:

php - 修复 Drupal 主题中登录框的大小

javascript - Firebase 身份验证在 Safari 中不起作用

ajax - 允许 Safari 和 Chrome 中的跨域请求?服务器响应与命令行参数

css - 显示 : table-cell floated DIV height expanding to 100% only working in Chrome

javascript - CKEditor5 React组件-添加插件问题

javascript - 正则表达式验证在函数调用时未返回正确结果

reactjs - 如何使用 Next.js 中的门户来获取直接父容器之外的子元素?

javascript - 编辑列表中的元素

html - 页面在大多数浏览器中显示正确,但在 Safari 中不正确

javascript - 如何在登录 Firebase 时获取用户信息