简体   繁体   English

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

[英]React hooks object update gets strange behaviour on Safari browser

React hooks object update gets strange behaviour on Safari browser(only on Safari browser) 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"
});

setState设置状态

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

Is there anything break the order of object for Safari browser 🤔有什么东西会破坏 Safari 浏览器的对象顺序🤔

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

编辑 infallible-keldysh-uolgt

The reason this is happening is because it's re-rendering the array that you are using for the keys and the keys aren't in the same order as they were in the first render.发生这种情况的原因是因为它正在重新渲染您用于键的数组,并且键的顺序与它们在第一次渲染中的顺序不同。 You can see this by adding a console.log(state) just before the first return.您可以通过在第一次返回之前添加console.log(state)来查看这一点。 Safari is more strict in this than Chrome or Firefox. Safari 在这方面比 Chrome 或 Firefox 更严格。

You can fix this by sorting the array before using it to render.您可以通过在使用数组渲染之前对数组进行排序来解决此问题。

You can also fix this by changing your toggle function to something like this:您还可以通过将切换功能更改为以下内容来解决此问题:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM