これが、動的コンポーネント (残りの API からデータを取得するコンポーネント) の意味です。
import React from "react";
import axios from "axios";
class WeatherData extends React.Component {
state = {
data: null,
latitude: "19.970324",
longitude: "79.303360",
weatherData: {},
_apiKey: "", //NOTE: In my code I have pass the Id here.
city: "chandrapur,in"
};
componentDidMount() {
const { latitude, longitude, _apiKey, city } = this.state;
axios
.get(
`https://cors-anywhere.herokuapp.com/https://samples.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&appid=${_apiKey}`
)
.then(res => {
this.setState({ weatherData: res.data }, () => {});
});
}
render() {
return (
<div>
{this.state.weatherData.weather &&
this.state.weatherData.weather !== null &&
this.state.weatherData.weather.map(obj => {
return (
<div key={obj.id}>
{/* <span> */}
id: {this.state.weatherData.weather[0].id}
<br />
main: {this.state.weatherData.weather[0].main}
<br />
discription: {this.state.weatherData.weather[0].description}
<br />
icon: {this.state.weatherData.weather[0].icon}
{/* </span> */}
</div>
);
})}
</div>
);
}
}
export default WeatherData;
このコンポーネントを「renderToString」に渡そうとすると、空の値が返されます
このコードを残りの API から取得している値とともに文字列に入れる方法を知りたいです。
注: "renderToString" でマップ コンポーネントを渡そうとすると、データを含むコンポーネントではなく "Loading..." が表示されました。なのでタイミングの問題だと思います。
これにアクセスしようとしています。そして、onClick イベント ハンドラで print を呼び出しています。
const print = () => {
const string = ReactDOMServer.renderToString(<WeatherData />);
const pdf = new jsPDF("p", "mm", "a4");
pdf.fromHTML(string);
pdf.save("pdf");
};