【发布时间】:2020-09-26 20:43:55
【问题描述】:
我有一个由 React 组件组成的列表:
<div className="card-list">
{cards.map((card, i) => (
<Card card={card} key={card.cardId} index={i}/>
))}
</div>
问题是点击一张卡片应该为被点击的卡片打开一个模式窗口。要调用模态窗口,我在 Card 组件中使用以下代码:
const Card = ({card, key, index}) => {
const dispatch = useDispatch();
const showModal = useSelector(state => state.modal.showContentModal);
return (
<div>
//this is card view
<div onClick={() => dispatch(showContentModal())}>
<h3>{card.name}</h3>
</div>
//this is modal window
<div id={`modal-overlay-container-${key}`} className={`modal-overlay ${showModal && "active"}`}>
<div id={`modal-div-${key}`} className={`modal ${showModal && "active"}`}>
<p className="close-modal" onClick={() => dispatch(hideContentModal())}>
<svg viewBox="0 0 20 20">
<path fill="#8e54e9" d="..."/>
</svg>
</p>
<div className="modal-content">
<CardContent card={card} index={index}/>
</div>
</div>
</div>
</div>
)
}
export default Card;
showСontentModal() 动作改变了布尔标志,这使得模态窗口active,而hideModalContent() 则相反。但是由于列表中的所有组件都链接到一个操作,因此单击任何卡都会为所有组件打开一个模式窗口。有没有办法只针对特定卡触发动作?
【问题讨论】:
标签: javascript html reactjs jsx