javascript - React hooks 对象更新在 Safari 浏览器上出现奇怪的行为

标签 javascript arrays reactjs object react-hooks

React hooks 对象更新在 Safari 浏览器上有奇怪的行为(仅在 Safari 浏览器上)

const [state, setState] = React.useState({
  show_welcome: true,
  show_inline: false,
  restriction: false,
  request_dp: false,
  prevent_rtl: false,
  lang: "ta"
});

设置状态

const handleToggle = ({ target }) => {
  setState(s => ({ ...s, [target.name]: !s[target.name] }));
};

Safari 浏览器的对象顺序有什么问题吗🤔

React hooks object update gets strange behaviour on Safari browser

Edit infallible-keldysh-uolgt

最佳答案

发生这种情况的原因是因为它正在重新渲染您用于键的数组,而键的顺序与第一次渲染时的顺序不同。您可以通过在第一次返回之前添加 console.log(state) 来看到这一点。 Safari 在这方面比 Chrome 或 Firefox 更严格。

您可以通过在使用数组进行渲染之前对数组进行排序来解决此问题。

您也可以通过将切换功能更改为如下内容来解决此问题:

const handleToggle = ({ target }) => {
    const tempState = { ...state };
    tempState[target.name] = !tempState[target.name];
    setState(tempState);
  };

关于javascript - React hooks 对象更新在 Safari 浏览器上出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59632020/

相关文章:

javascript - 如何正确评估从 Behat 到 Selenium 的 javascript 代码?

javascript - useState 钩子(Hook),setState 函数。访问先前的状态值

javascript - 将对象数组分解为二维数组

javascript - 使用 lodash 从对象属性和值的集合创建两个数组

reactjs - IE 11 未在 API 调用中传递授权 header

javascript - Angular 函数调用在 IE 浏览器中不起作用

javascript - 通过延迟图像来加快页面加载速度

java - 从文本文件中查找最大值

javascript - Ant Design Pro 如何开启代码拆分?

javascript - 如何判断 Web 应用程序是否正在使用 ReactJs