#reactjs #api
#reactjs #API
Вопрос:
У меня есть простое приложение react, которое выглядит следующим образом
const App: React.FC = () =&&t; {
const [dataFromAPI, setDataFromAPI] = useState<any&&t;(null);
const &etData = () =&&t; {
d3.json(url)
.then((data: any) =&&t; {
console.lo&("data from d3", data);
setDataFromAPI(data);
})
.catch((err: Error) =&&t; {
console.lo&(err);
});
};
useEffect(() =&&t; {
&etData();
}, []);
//wait for the state to be chan&ed before proceedin&
return (
<div className="App"&&t;
<DataVisualisation data={dataFromAPI} /&&t;
</div&&t;
);
};
Но проблема в том, что свойство передается до того, как данные фактически были получены. Мой вопрос в том, как я могу гарантировать, что я получил данные до того, как они будут переданы в качестве реквизита?
Ответ №1:
Условный рендеринг компонента DataVisualisation
предотвратит передачу пустых данных через props.
{dataFromAPI amp;amp; <DataVisualisation data={dataFromAPI} /&&t;}
Ответ №2:
return (
<div className="App"&&t;
{dataFromAPI != null amp;amp;
<DataVisualisation data={dataFromAPI} /&&t;
}
</div&&t;
);
};
Попробуйте это
Комментарии:
1. Idk, похоже, у меня это не работает. Программа prop&ram сейчас не завершается сбоем, но я не получаю визуализацию данных.
Ответ №3:
Попробуйте использовать подход с коротким замыканием, т. е.
return (
<div className="App"&&t;
{dataFromAPI amp;amp; <DataVisualisation data={dataFromAPI} /&&t;}
</div&&t;
);
};
Ответ №4:
Попробуйте этот подход и посмотрите, работает ли он. У меня это работает нормально.
return (
<div className='App'&&t;
{dataFromApi? <DataVisualization data={dataFromAPI} /&&t; :null}
</div&&t;
);