Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

862
Visualizações
useSelector no se actualiza incluso después del envío

Estoy tratando de mostrar productos usando el resultado de axios obtenido del reductor, pero el valor de useSelector simplemente no cambiará y aún está vacío incluso después del envío. He comprobado el resultado de axios y la respuesta tiene datos correctos. ¿Tiene algo que ver con esta línea en la documentación de redux?

Con useSelector(), devolver un objeto nuevo cada vez forzará una nueva representación de forma predeterminada.

reductor

 import axios from "axios"; export const products = (state = [], action) => { switch (action.type) { case "FETCH_PRODUCTS": { const uri = "/products"; axios.get(uri).then(function (response) { if (response.status == 200) { console.log(response.data.products); // ===> correct new value return { state: response.data.products }; } }); }

Aplicación.js

 import React, { useEffect } from "react"; import { shallowEqual, useSelector, useDispatch } from "react-redux"; import "../css/App.css"; import { Products, Navbar, Cart } from "../components"; function App() { const dispatch = useDispatch(); const products = useSelector((state) => state.products, shallowEqual); const cart = useSelector((state) => state.cart, shallowEqual); useEffect(() => { dispatch({ type: "FETCH_PRODUCTS", }); console.log(products); // ===> still empty array }, []); return ( <div className="App"> <Navbar /> <Cart cart={cart} /> <Products products={products} /> </div> ); } export default App;
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Primero debes crear tu acción .

 import axios from 'axios'; export const fetchProducts = () => async (dispatch) => { try { const { data } = await axios.get('...'); dispatch({ type: "FETCH_PRODUCTS", payload: data.result }); } catch (error) { console.log(error); } };

Luego, use dispatch y action juntos

 import { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { fetchProducts } from './actions'; const getSelectors = state => ({ cart: state.cart, products: state.products }); const App = () => { const dispatch = useDispatch(); const {cart, products} = useSelector(getSelectors); useEffect(() => { dispatch(fetchProducts()); }, []); return ( <div className="App"> <Navbar /> <Cart cart={cart} /> <Products products={products} /> </div> ); };
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda