【发布时间】:2020-02-25 16:20:44
【问题描述】:
我有一个映射的项目列表作为单选按钮。我正在切换选中状态。
我收到来自setCheckedState({i: false}); 的错误,导致重新渲染过多。
我将如何解决这个问题?
// Import useState
import { useState } from 'react';
// Set your active and SetActive items
const [active, setActive] = useState({});
{Object.values(equipment).map((item, i) => {
// Defautl the item to non active
setActive({i:false});
return (
<IonItem key={item}>
<IonLabel>{item}</IonLabel>
<IonRadio mode="md" slot="start" value={item} checked={active.i} onClick={() => {
// Set the specific Item to active
setActive({i:!active.i});
}} />
</IonItem>
);
})}
【问题讨论】:
-
渲染时不能设置状态,因为设置状态会导致重新渲染,从而导致死循环。使用
useState声明状态时设置状态的默认值 -
这是有道理的,我试过了,但它最终会切换所有单选按钮,而不仅仅是点击的那个。