【发布时间】:2020-01-11 04:16:17
【问题描述】:
这是这个问题的后续问题,与我的问题最接近:
我正在创建一个小型 React.js 应用程序来研究该库。我收到了这个警告:
已超过最大更新深度。当组件在 useEffect 中调用 setState 时,可能会发生这种情况,但 useEffect 要么没有依赖数组,要么每次渲染时其中一个依赖项都发生了变化。
我得到了一个功能组件,其中有这段代码:
const propertiesMap2 = new Map([ //There is also propertiesMap1 which has the same structure
["TITLE4",
{
propertyValues: {
myProperty10 : "myVal1",
myProperty11 : "myVal2",
myProperty12 : "myVal3",
},
isOpen: true
}
],
["TITLE5",
{
propertyValues: {
myProperty13 : "myVal4",
myProperty14 : "myVal5",
myProperty15 : "myVal6",
},
isOpen: true
}
],
["TITLE6",
{
propertyValues:{
myProperty16 : "myVal7",
myProperty17 : "myVal8",
myProperty18 : "myVal9",
},
isOpen: true
}
]
]);
const [properties, setPropertiesMapFunc] = useState(new Map());
useEffect(()=>
{
let mapNum = Number(props.match.params.id);
setPropertiesMapFunc(mapNum === 1 ?propertiesMap1 : propertiesMap2);
}, [properties]);
每次都选择正确的属性映射,但就像我说的那样,我得到了这个错误。为什么我会得到它,如果propertiesMap 是恒定的而没有任何变化,并且properties 作为参数传递给setEffect,所以我认为它只会在发生变化时重新渲染..
【问题讨论】:
-
不是每次调用 setPropertiesMapFunc 时都会重新渲染组件吗?意思是任何时候你设置状态,即使新状态是相同的?
-
地图的初始化是在组件内部还是外部?
-
@trixn 好的,这似乎是你所说的。每次都会重新创建地图,因此会导致重新渲染。如果您将其添加为答案,我会接受它
标签: reactjs react-hooks