【发布时间】:2021-08-02 04:35:22
【问题描述】:
目前我有一个看起来像这样的反应组件:
const GeraCard = (cards, cart = false) => {
return cards.map((v, i) => {
return (
<div key={i} className={styles.card}>
<div onClick={() => urlRender(v.url)} className={styles.cardContent}>
<div>
<span className={styles.cardTitulo}>{v.Nome}</span>
</div>
<div>
<span className={styles.cardData}>{v.Data}</span>
<span className={styles.cardAtivos}>{v.Ativos} ativo(s)</span>
</div>
{cart ? <div>R$ {FormatCapital(v.Capital)}</div> : null}
</div>
<span className={styles.trash}>
<FontAwesomeIcon
icon={faTrash}
color={"#3c3c3c77"}
onClick={(e) => {
e.persist()
TrashHandler(v.Nome, e)
}}
/>
</span>
</div>
);
});
};
基于卡片数组,它呈现如下内容:
每当我点击垃圾桶按钮时,我都会向我的后端发出请求,编辑我的数据库中的列表并根据现在更新的“卡片”重新呈现组件。问题是这需要一些时间才能发生,所以我想要一种方法在我的后端完成它的工作时立即从 dom 中删除它。
有点像
{show ? renderCompoennt : null}
我尝试使用 vanilla javascript 从垃圾桶中抓取父级,这将是我要删除的卡,但结果无法预测,而且速度也很慢。
我最近的尝试是这样的:
const GeraCard = (cards, cart = false) => {
return cards.map((v, i) => {
const [show, setShow] = useState(true);
return (
<div key={i}>
{show ?
<div className={styles.card}>
<div onClick={() => urlRender(v.url)} className={styles.cardContent}>
<div>
<span className={styles.cardTitulo}>{v.Nome}</span>
</div>
<div>
<span className={styles.cardData}>{v.Data}</span>
<span className={styles.cardAtivos}>{v.Ativos} ativo(s)</span>
</div>
{cart ? <div>R$ {FormatCapital(v.Capital)}</div> : null}
</div>
<span className={styles.trash}>
<FontAwesomeIcon
icon={faTrash}
color={"#3c3c3c77"}
onClick={(e) => {
setShow(false);
e.persist()
TrashHandler(v.Nome, e)
}}
/>
</span>
</div> :
null
}
</div>
);
});
};
但是 react 不允许我这样做。即使速度很快,每次删除一个项目时,react 都会抱怨“渲染的钩子更少”并导致应用程序崩溃。
【问题讨论】:
-
你不能在地图中使用
useState,我建议将地图中的内容提取为组件
标签: javascript reactjs dom-manipulation