Как заставить ссылки работать с card-img-overlay Реагировать

#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>
  );
}