Tengo un componente conectado redux con la acción onClick vinculada a él. Cada vez que hago clic se vuelve a mostrar, aunque uso el gancho useCallback . Aquí está mi componente simplificado:

 const Map = props ={amp}gt; { const dispatch = useDispatch(); // from react-redux const coordinates = useSelector(state ={amp}gt; state.track.coordinates); // from react-redux const onClick = useCallback( // from react data ={amp}gt; { return dispatch({type: 'ADD_COORDINATES', payload: data}); }, [dispatch] ); return ( {amp}lt;div className="Map"{amp}gt; {amp}lt;GoogleMap onClick={onClick}{amp}gt; {amp}lt;Track coordinates={coordinates} /{amp}gt; {amp}lt;/GoogleMap{amp}gt; {amp}lt;/div{amp}gt; ); }; 

Sin dar ningún contexto adicional, y que el componente está realmente «simplificado» (no hay nada más que pueda causar un render), el componente Map se volverá a renderizar solo en su render padre:

 const Parent = () ={amp}gt; { const coordinates = useSelector(coordinatesSelector); return {amp}lt;Map /{amp}gt;; }; 

Al despachar la acción addCoordinates , puede activar su padre.

Deberías probar y memorizar el componente Map :

Si su componente de función genera el mismo resultado con los mismos accesorios, puede envolverlo en una llamada a React.memo para un aumento de rendimiento en algunos casos al memorizar el resultado. Esto significa que React omitirá la representación del componente y reutilizará el último resultado representado.

  const Map = () ={amp}gt; { ... return ....; }; export default React.memo(Map); 

Editar después de la actualización de la pregunta:

Su componente se vuelve a useSelector debido a useSelector como se indica en los documentos:

Cuando se despacha una acción, useSelector () hará una comparación de referencia del valor del resultado del selector anterior y el valor del resultado actual. Si son diferentes, el componente se verá obligado a volver a renderizar. Si son iguales, el componente no se volverá a representar.

Por lo tanto, es posible que desee agregar equalityFn adicional equalityFn :

 const coordinates = useSelector(state ={amp}gt; state.track.coordinates, areSameCoords)