Estoy llamando a useSelector con éxito desde un componente, que deriva un nombre de producto de una identificación.
const productId = 25; // whatever const productName = useSelector( (state) => state.dashboard.dashboards.filter( ({ Id }) => Id === productId )[0].Name ); Sin embargo, mi selector depende de productId , que estoy almacenando en una variable en el mismo archivo. Me gustaría almacenar esta llamada useSelector en un archivo externo para poder compartirla. Intenté lo siguiente, pero la id no está undefined :
selectores.js
export const getProductNameById = (store, id) => { return store.dashboard.dashboards.filter(({ Id }) => Id === id)[0] .Name; }algún_archivo.js
import { useSelector } from "react-redux"; import { getProductNameById } from "./selectors"; const productId = 25; const productName = useSelector(getProductNameById, productId);desafortunadamente, la función selector solo acepta el estado de la tienda como argumento. Consideraría utilizar un enfoque curry para abordar el problema:
export const getProductNameById = id => store => { return store.dashboard.dashboards.filter(({ Id }) => Id === id)[0] .Name; }algún archivo
import { useSelector } from "react-redux"; import { getProductNameById } from "./selectors"; const productId = 25; const productName = useSelector(getProductNameById(productId));Esto también debería funcionar:
const productName = useSelector(getProductNameById(productId));