Quiero pasar datos después de obtener eso con efecto de uso en mi componente, después de un tiempo encontré el problema
export interface IUser { display_name: string; id: string; images: Image[]; } export interface Image { url: string; } const [userData, setUser] = React.useState<IUser[]>([{ display_name: '', id: '', images: [{ url: '' }] }]); const token = useSelector((state: RootStateOrAny) => state.token.value); const getCurrentUser = async (token: string) => { try { const response = await axios.get("https://api.spotify.com/v1/me", { headers: { Authorization: `Bearer ${token}` } }) return response.data } catch (e) { console.error(e) } }yo uso asíncrono
React.useEffect(() => { const get = async()=>{ const data = await getCurrentUser(token); setUser(data) } get(); },[])estoy usando la plantilla del componente de la barra de la aplicación de material ui y el problema proviene del componente secundario de información sobre herramientas que muestra el avatar
aquí mi código
... <Box sx={{ flexGrow: 1, justifyContent: 'end' }}> {console.log(userData)} //this line working and can pass the data <Tooltip title={userData.images[0].url}> // this line didnt working so if i pass to another child like avatar it cant work too, but if i delete the data code it will work properly <IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}> {/* {console.log(userData.images[0].url)} */} <Avatar alt="Remy Sharp" src='{}' /> </IconButton> </Tooltip> ... </Box> ...Creo que el problema proviene de la reacción de la representación, porque en el exterior del componente de información sobre herramientas puede funcionar, pero cuando ingrese el componente de información sobre herramientas, renderizará el componente de información sobre herramientas primero antes del useEffect, por lo que los datos no están disponibles.
Estoy atascado en mi proyecto final para mostrar datos de perfil en la barra de aplicaciones porque no puedo resolver este problema: V, ¿alguien puede ayudarme con esto? ¡muchas gracias!
Por lo que puedo decir, ha declarado que userData es una matriz.
export interface IUser { display_name: string; id: string; images: Image[]; } export interface Image { url: string; }...
const [userData, setUser] = React.useState<IUser[]>([{ display_name: '', id: '', images: [{ url: '' }], }]); En el retorno de representación, el código accede al estado de datos de userData como si fuera un objeto. console.log(userData) está bien ya que es solo el valor de estado completo, pero userData.images no está definido. Sin embargo, acceder userData.images solo está bien, es cuando el código intenta acceder al índice 0 de este valor indefinido que se produce el error.
Sospecho que querías acceder primero a userData[0].images , luego userData[0].images[0] .
código
console.log(userData); ... <Box sx={{ flexGrow: 1, justifyContent: 'end' }}> <Tooltip title={userData[0].images[0].url}> <IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}> <Avatar alt="Remy Sharp" src='{}' /> </IconButton> </Tooltip> ... </Box> ...