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

96
Visualizações
Las acciones de React redux deben ser objetos simples. Use middleware personalizado para acciones asíncronas

Quiero mostrar una lista de componentes en la página y estoy usando react-redux para eso. Hay muchos repetitivos que no están claros y los estoy mezclando para lograr alguna funcionalidad. Hay un problema con la acción asíncrona que arroja el siguiente error

Actions must be plain objects. Use custom middleware for async actions.

acción

 export const fetchPublicDisplays = () => async dispatch => { console.log("object") const response = await api.get('/display/list'); dispatch({ type: FETCH_PUBLIC_DISPLAYS, payload: response.data }); };

reductor

 const displayReducer = (state = [], action) => { switch (action.type) { case FETCH_PUBLIC_DISPLAYS: return action.payload; default: return state } }

El componente

 class PublicHome extends React.Component { componentDidMount() { this.props.fetchPublicDisplays() } renderDisplays() { console.log(this.props) if (this.props.displays) { return this.props.displays.map(display => { return ( <div className="item" key={display.id}> display </div> ) }) } } render() { return ( <> {this.renderDisplays()} </> ) } } const mapStateToProps = state => { return { displays: state.deisplays }; }; export default connect( mapStateToProps, { fetchPublicDisplays } )(PublicHome);
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El segundo argumento para conectarse es una función (mapDispatchToProps) que obtiene el envío como argumento y devuelve un objeto. Aquí está el documento oficial para el mismo: https://react-redux.js.org/using-react-redux/connect-mapdispatch . En su caso, le está dando un objeto, es decir, fetchPublicDisplays. El segundo problema es que no puede hacer cosas asíncronas dentro de las acciones redux, primero debe hacer la operación asíncrona y luego llamar a la acción redux para actualizar el estado de la tienda. Aquí está su código modificado que debería funcionar:

 import React from "react"; import { connect } from "react-redux"; import api from "axios"; export const displayReducer = (state = [], action) => { switch (action.type) { case "FETCH_PUBLIC_DISPLAYS": return action.payload; default: return state; } }; export const fetchPublicDisplays = (data) => (dispatch) => {}; class PublicHome extends React.Component { componentDidMount() { this.fetchPublicDisplaysAsync(); } fetchPublicDisplaysAsync = async () => { const response = await api.get("/display/list"); this.props.fetchPublicDisplays(response.data); }; renderDisplays() { console.log(this.props); if (this.props.displays) { return this.props.displays.map((display) => { return ( <div className="item" key={display.id}> display </div> ); }); } } render() { return <>{this.renderDisplays()}</>; } } const mapStateToProps = (state) => { return { displays: state.deisplays }; }; const mapDispatchToProps = (dispatch) => ({ fetchPublicDisplays: (data) => { dispatch({ type: "FETCH_PUBLIC_DISPLAYS", payload: data }); } }); export const App = connect(mapStateToProps, mapDispatchToProps)(PublicHome);

Aquí está el enlace de codeSandbox para el mismo: https://codesandbox.io/s/distracted-meadow-3qi32?file=/src/App.js:0-1243

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