Turning on/off setInterval locating - using React.js
Typo? I think you meant to set isDragged to false when dragging finishes:
onDragEnd={() =&gt; {
  setIsDragged(false);
}}

Note that you don't need to declare parameter you don't use (and probably shouldn't, to make the code easier to read).
Concise props When you have variables that you want to pass as props of the same name, you can make things a bit concise by using shorthand property names and spreading the object into props. For example:
&lt;UserLocationTimer
  userLocation={userLocation}
  setUserLocation={setUserLocation}
  panTo={panTo}
&gt;&lt;/UserLocationTimer&gt;

can be
&lt;UserLocationTimer {...{userLocation, setUserLocation, panTo}} /&gt;

(it has no children, so it can be made self-closing)
Listing fewer identifiers while writing code means less chance of typos, and helps enforce consistent names for things.
Marker position props Rather than listing out the lat and lng properties of userLocation, you can pass the plain object itself to position:
&lt;Marker position={props.userLocation}

Return early instead of long if/else blocks - if one sees if followed by a long block of code, followed by an else, keeping track of what condition the else is corresponding to can be harder to recognize at a glance than it needs to be. Consider returning the short branch first instead. See below.
JSX fragments are only needed when enclosing 2 or more tags - if a fragment only has one child tag, it can be removed completely, like this:
export const UserLocation = ({ userLocation }) =&gt; (
  if (!userLocation) {
    return null;
  }
  return (
    &lt;Marker
      // ...

The same thing applies to the JSX returned by UserLocationTimer, but there's a better approach:
Consolidate UserLocation Since UserLocation is being rendered regardless, I think conditionally putting it inside UserLocationTimer isn't the right way to go. I'd remove the timer component completely, and implement its logic in the parent component instead, while unconditionally rendering UserLocation.
const intervalRef = useRef();
useEffect(() =&gt; {
  if (isDragged) {
    const intervalId = setInterval(locateMe, 2000);
    // Cleanup will run on dismount and when isDragged goes to false
    return () =&gt; clearInterval(intervalId);
  }
}, [isDragged]);

// ...

&lt;GoogleMap
  onDrag={() =&gt; {
    setIsDragged(true);
  }}
  onDragEnd={() =&gt; {
    setIsDragged(false);
  }}
&gt;
  . . .
  &lt;UserLocation {...{userLocation}} /&gt;
&lt;/GoogleMap&gt;

Naming The name UserLocation is very similar to userLocation, but one is a component, while the other holds data. Maybe rename them so that they're more distinct - perhaps UserLocationMarker and userLocationCoords?