#reactjs #hyperlink #reactstrap #card
#reactjs #гиперссылка #reactstrap #card
Вопрос:
У меня возникла проблема с моим проектом. Я создал card-img-overlay для отображения значков поверх изображения. Если вы нажмете на все изображение, вы будете перенаправлены на сообщение. Я хотел бы сделать значки «Нравится» и «Поделиться» интерактивными.
Мой проект находится в Reactjs. Я показываю изображения и видео из Reddit API.
Спасибо за вашу помощь.
id,
slugTitle,
title,
url_overridden_by_dest,
author,
preview,
}) => {
const [isVideo, setIsVideo] = useState(false);
useEffect(() => {
if (preview) setIsVideo(preview.split('.').pop() === 'mp4');
}, [preview]);
const history = useHistory();
const goToPage = () => {
history.push(`/Post/${id}/${slugTitle}`);
};
return (
<Card
inverse
onClick={goToPage}
style={{
cursor: 'pointer',
}}
>
{isVideo amp;amp; (
<video autoPlay="false" loop width="100%" src={preview}>
<track default kind="captions" />
</video>
)}
{!isVideo amp;amp; (
<CardImg top width="100%" src={url_overridden_by_dest} alt={title} />
)}
<CardImgOverlay className="hideinfos">
<CardText className="w-100 d-flex justify-content-between">
<div>
<VscAccount className="mr-2" size={20} />
{author}
</div>
<div>
<LikeButtonhp
className="mr-2 card-link"
size={20}
style={{
position: 'relative',
}}
/>
<BiShareAlt size={20} />
</div>
</CardText>
</CardImgOverlay>
</Card>
);
};
Ответ №1:
Вам нужно будет установить onClick
обработчики для ваших LikeButtonhp
BiShareAlt
компонентов и и использовать, event.stopPropagation()
чтобы событие не переходило в <Card />
:
<BiShareAlt
size={20}
onClick={event => {
event.stopPropagation();
// Do stuff for share click
}}
/>
Возможно, вам потребуется изменить компоненты BiShareAlt
and LikeButtonhp
для поддержки onClick
prop, например, если они отображают <button>
элемент, он может выглядеть так:
const BiShareAlt = ({ onClick }) => (
<button onClick={onClick}>
Share
</button>
);
export default BiShareAlt;
Комментарии:
1. Привет, Мэтт, спасибо за вашу помощь. Это решает мою проблему.
Ответ №2:
В моем onClick я добавил e.stopPropagation(); и это решает мою проблему. Теперь я могу нажать на значок сердца, и это работает. Это останавливает onClick, настроенный на моем изображении (родительском).
function LikeButtonhp() {
const [liked, setLiked] = useState(false);
return (
<Button
outline
color="link"
className="likebutton"
onClick={(e) => {
e.stopPropagation();
setLiked(!liked);
}}
style={{ color: 'white' }}
>
{liked ? <BsHeartFill size={20} /> : <BsHeart size={20} />}
</Button>
);
}