Компонент связи или любой другой элемент с прослушивателем событий не запускает событие click, если в документе также имеется активный eventListener - PullRequest
2 голосов
/ 19 апреля 2019

При подключении слушателя события click к DOM, такие элементы, как Link или некоторые кнопки со слушателем onClick, которые являются частью ref, не реагируют на click event.Если никаких действий не предпринимается - это работает нормально, но когда я звоню, например, toggleMenu(), это просто останавливается на этом.Что-то, что вы обычно видите после применения e.stopPropagation() или e.preventDefault() ...

Каким-то странным даже не знаю, как объяснить, лучше просто взгляните на код.


import React, { useRef, useEffect } from "react";
import ReactDOM from "react-dom";
import { BrowserRouter, Link } from "react-router-dom";

function App() {
  const menuRef = useRef();

  const onDocumentClick = ({ target }) => {
    if (menuRef.current.contains(target)) {
      // event stops here if any action is taken
      // even an alert

      // comment this line to see the difference
      alert('This is not button\'s alert');
    }
  };

  useEffect(() => {
    document.addEventListener("mousedown", onDocumentClick);

    return () => {
      document.removeEventListener("mousedown", onDocumentClick);
    };
  }, []);

  return (
    <BrowserRouter>
      <div ref={menuRef} className="App">
        <Link to="/test">Not working</Link>
        <p>Button should show an alert saying 'clicked'</p>
        <button onClick={() => alert("clicked")}>Doesn't work</button>
      </div>

      <br/>
      <br/>
      <br/>

      <p>Outside of 'ref'</p>
      <Link to="/test">Works</Link>
      <p>........................</p>
      <button onClick={() => alert("clicked")}>Works</button>
    </BrowserRouter>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

У меня есть код на https://codesandbox.io/s/24z2v670wr, если вы хотите проверить его.

1 Ответ

1 голос
/ 20 апреля 2019

решаемая. Должно быть click вместо mousedown подробности здесь. https://github.com/facebook/react/issues/15455

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...