es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TypeError: No se pueden leer las propiedades de undefined (leyendo ‘getData’)

Estoy intentando acceder a getData() desde GetDataService en mi componente de función React DataComponent() pero sigo obteniendo este error y no sé cómo resolverlo.

TypeError: No se pueden leer las propiedades de indefinido (leyendo ‘getData’)

GetDataService

export default class GetDataService {

private dataRepo: DataRepository

constructor(dataRepo: DataRepository) {
this.dataRepo = dataRepo;
}

getData() {
return this.dataRepo.getData();
}
}

Repositorio que estoy inyectando

export default interface DataRepository {

getData: () => Promise;
}

Clase que obtiene mis datos e implementa el Repositorio

export default class DataFetch implements DataRepository {

dataurl = ‘http://localhost:8080/data’;

getData(): Promise {
return Promise.resolve(fetch(this.dataurl));
}
}

Componente

function DataComponent() {

const [data, setData] = useState([]);

const getDataService = new GetDataService(dataRepo);

useEffect(() => {

    getDataService.getData()
        .then(res =>  {
            return res.json();
        })
        .then(data => {
            console.log('Data ' + JSON.stringify(data));
            setData(data);
        })

}, [])

...

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “TypeError: No se pueden leer propiedades indefinidas (leyendo ‘getData’)” significa que el código está tratando de acceder a una propiedad llamada “getData” en un objeto que está indefinido. En este caso, parece que la variable “dataRepo” está indefinida, por lo que cuando se llama al constructor de la clase “GetDataService” con “dataRepo” como parámetro, la variable “this.dataRepo” también es indefinida. Por lo tanto, cuando se llama al método “getData()” en el objeto “GetDataService”, falla con el mensaje de error dado.

    Para solucionar este error, necesitas asegurarte de que la variable “dataRepo” está definida e instanciada antes de pasarla como parámetro al constructor de la clase “GetDataService”. Una forma de hacer esto es crear una instancia de la clase “DataFetch” y pasarla como parámetro al constructor de “GetDataService”, de esta manera:

    function DataComponent() {
        const [data, setData] = useState([]);
    
        const dataRepo = new DataFetch();
        const getDataService = new GetDataService(dataRepo);
    
        useEffect(() => {
            getDataService.getData()
                .then(res => res.json())
                .then(data => {
                    console.log('Data ' + JSON.stringify(data));
                    setData(data);
                });
        }, []);
    
        // ...
    }
    

    Esto debería solucionar el error y permitir que la “DataComponent” recupere datos del servidor usando las clases “GetDataService” y “DataFetch”.

Comments are closed.