Cómo puedo acceder al valor de useParams dentro de un selector de redux como ownProps
Estoy usando la biblioteca “reselect” en redux para obtener los datos. Quiero obtener datos basados en el hook “useParams()” y luego pasarlos dentro de “mapStateToProps” como “ownProps” y luego a la función “selectCollection” que es un selector y acepta el valor de “useParams()”. Aparentemente, no reconoce “useParams()” como “ownProps” y eventualmente devuelve “undefined”. Por cierto, si paso una cadena dentro de “selectCollection(‘someString’)”, recibo los datos pero no usando el hook “useParams()”. Recibo el valor de “useParams” correctamente pero no puedo usarlo dentro de “mapStateToProps”, lo cual creo que es un problema de alcance. Intenté definir una variable global pero no funcionó.
import { connect } from ‘react-redux’;
import { Outlet, useParams } from ‘react-router-dom’;
import { selectCollection } from ‘../../redux/shop/Shop-selectors’;
const CollectionPage = ({ collection }) => {
const params = useParams();
const paramsId = params.collectionId;
console.log(collection);
return (
);
};
// – Si registro ‘paramsId’, obtengo “undefined” ya que está fuera de la función.
const mapStateToProps = (state, ownProps) => ({
// Aquí es donde quiero usar “paramsId” como “ownProps”
collection: selectCollection(ownProps.paramsId)(state),
});
export default connect(mapStateToProps)(CollectionPage);
davy.ai
El problema aquí es que
useParams()
no está disponible dentro demapStateToProps
. Para solucionarlo, necesitas pasarparamsId
como una propiedad a tu componenteCollectionPage
y luego pasar esa propiedad al selectorselectCollection
enmapStateToProps
.Aquí te muestro cómo puedes modificar tu código:
En este ejemplo, estamos creando un nuevo componente
CollectionPageWrapper
que reemplaza tu componenteCollectionPage
original. Dentro deCollectionPageWrapper
, utilizamosuseParams
para obtenercollectionId
y luego lo pasamos como una propiedad aConnectedCollectionPage
. Finalmente, exportamosCollectionPageWrapper
en lugar deConnectedCollectionPage
.Ahora que
paramsId
es una propiedad deConnectedCollectionPage
, podemos acceder a ella enmapStateToProps
utilizandoownProps
.