Ant design 折叠面板在状态更改后保持打开状态
Ant design collapse panel remains open after state change
我遇到了 ant design collapse 的问题,我无法解决。我有一个状态数组中的报价列表。我为每个项目动态创建了一个面板。如果我们打开这个面板,它包含一个按钮。单击按钮后,我会从我的状态中删除特定项目。直到此时工作正常,状态被更新并且面板项被渲染而不包含被删除的项。
但是问题来了:如果我们在后面有其他面板的面板上单击删除按钮,即使关闭了下面的面板也会打开。状态更新但折叠的活动键由于某种原因保持不变。
问题:如果项目被删除,我如何更新活动密钥?谢谢。
我的代码:
const [RecievedOffers, setRecievedOffers] = useState([])
const renderRecievedOffers = (Offers) => Offers.map((offer, index) => {
<Panel header={'Test'} key={index}>
..some other things
<Button shape="circle" icon={<MinusOutlined />} size="medium" onClick={() => handleRecievedOfferDecline(offer.OfferID)} />
</Panel>
}
const handleRecievedOfferDecline = async (offerId) => {
let newRecievedOffers = RecievedOffers.filter( (offer) => offer.OfferID !== offerId)
setRecievedOffers([...newRecievedOffers])
}
return (
<Collapse accordion>
{renderRecievedOffers(RecievedOffers)}
</Collapse>)
提前致谢
发生这种情况是因为地图的 index
被用作面板列表的键。当项目的顺序发生变化时,这可能会导致列表状态出现问题,就像您的情况一样。不建议对键使用索引,如 React docs.
中所述和解释的那样
由于您在 offer
对象上进行映射,您可以使用它们的 OfferID
作为列表的键,这应该可以解决您的问题。
我遇到了 ant design collapse 的问题,我无法解决。我有一个状态数组中的报价列表。我为每个项目动态创建了一个面板。如果我们打开这个面板,它包含一个按钮。单击按钮后,我会从我的状态中删除特定项目。直到此时工作正常,状态被更新并且面板项被渲染而不包含被删除的项。
但是问题来了:如果我们在后面有其他面板的面板上单击删除按钮,即使关闭了下面的面板也会打开。状态更新但折叠的活动键由于某种原因保持不变。
问题:如果项目被删除,我如何更新活动密钥?谢谢。
我的代码:
const [RecievedOffers, setRecievedOffers] = useState([])
const renderRecievedOffers = (Offers) => Offers.map((offer, index) => {
<Panel header={'Test'} key={index}>
..some other things
<Button shape="circle" icon={<MinusOutlined />} size="medium" onClick={() => handleRecievedOfferDecline(offer.OfferID)} />
</Panel>
}
const handleRecievedOfferDecline = async (offerId) => {
let newRecievedOffers = RecievedOffers.filter( (offer) => offer.OfferID !== offerId)
setRecievedOffers([...newRecievedOffers])
}
return (
<Collapse accordion>
{renderRecievedOffers(RecievedOffers)}
</Collapse>)
提前致谢
发生这种情况是因为地图的 index
被用作面板列表的键。当项目的顺序发生变化时,这可能会导致列表状态出现问题,就像您的情况一样。不建议对键使用索引,如 React docs.
由于您在 offer
对象上进行映射,您可以使用它们的 OfferID
作为列表的键,这应该可以解决您的问题。