gpt4 book ai didi

javascript - react 严格模式

转载 作者:行者123 更新时间:2023-12-03 08:18:50 24 4
gpt4 key购买 nike

我正在处理我的项目,我注意到当打开严格模式时,它会将两个相同的元素插入我的数组中。当严格模式关闭时,它仅将一个元素插入数组。有什么解释为什么会发生这种情况吗?

import {getRandomNumber} from './utils';


export function registerTicket() {
const newTicket = {
number: getRandomNumber(),
color: 'red',
}
this.setState((prevState) => {
prevState.tickets.push(newTicket);
return {
remainingTickets: --prevState.remainingTickets,
tickets: prevState.tickets,

}
})
}

这是我的状态。

    this.state = {
winningNumber: getRandomNumber(),
remainingTickets: 5,
tickets: [],
finished: false
};

最佳答案

React StrictMode 通过故意重复调用某些生命周期方法和 React Hook 来帮助暴露无意的副作用。 setState 更新器函数被调用两次。我将留下对链接问题的深入解释。

Detecting unexpected side-effects

当您将新元素插入其中时,您无意中的副作用是先前 tickets 状态的状态突变当您预- 减少 remainingTickets 状态。帽子戏法是,您也不会返回新的 tickets 数组引用。

this.setState((prevState) => {
prevState.tickets.push(newTicket); // <-- mutation!!
return {
remainingTickets: --prevState.remainingTickets, // <-- mutation!!
tickets: prevState.tickets, // <-- same old array reference
}
})

解决方案是将先前的状态数组浅复制到新的数组引用中并附加新元素。

this.setState((prevState) => ({
remainingTickets: prevState.remainingTickets - 1,
tickets: [...prevState.tickets, newTicket],
}));

关于javascript - react 严格模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68465414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com