Search code examples
ffireasonbucklescript

What does the following warning mean?


What does the following warning mean and how can I fix its cause?

Warning: Unimplemented primitive used:removeEventListener 

in

[@bs.val]
external addEventListener: (string, unit => unit) => unit = "addEventListener";
external removeEventListener: (string, unit => unit) => unit =
  "removeEventListener";

...

React.useEffect(() => {
  let handler = () => dispatch(ToggleMenu(false));
  addEventListener("popstate", handler);
  Some(() => removeEventListener("popstate", handler));
});

Solution

  • You are missing [@bs.val] at the front of removeEventListener when declaring the binding.

    [@bs.val]
    external addEventListener: (string, unit => unit) => unit = "addEventListener";
    [@bs.val]
    external removeEventListener: (string, unit => unit) => unit =
      "removeEventListener";
    
    

    Sometimes it's difficult to see this because the linter is always moving lines around ;)

    Source: I've also ran into this minutes ago.