私はhttps://openweathermap.org/から天気データを取得するコンテナコンポーネントを持っています。次いで、コンテナコンポーネントは、その状態データをプレゼンテーションコンポーネントに供給する。特定のオブジェクトプロパティがリアクションコンポーネントで定義されていません
いくつかの状態プロパティが存在しますが、Presentationalコンポーネントでは他のものは定義されていません。私はタイムアウトでそれらをラップするが、表示されます。
私はこれがなぜ起こっているのかを探していましたが、コンテナコンポーネントでフェッチされ、プレゼンテーションコンポーネントに渡された後に未定義の理由が見つからなかったのです。
CodePen:プレゼンテーションとコンテナのコンポーネントに関するhttps://codepen.io/ZCKVNS/pen/wpGaMe?editors=0010
記事:https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0
const App = data => {
setTimeout(() => {
console.log('clouds', data.data.clouds.all); //defined
console.log('lat',data.data.coord.lat); //defined
console.log('lon', data.data.coord.lon); //defined
}, 100);
return (
<div>
{ data.data.clouds.all } <!-- Not defined -->
</div>
);
}
class AppContainer extends React.Component {
constructor() {
super();
this.state = { data: {} };
}
componentDidMount() {
fetch('https://api.openweathermap.org/data/2.5/weather?zip=43055,us&appid=4e08bb16c8936bd92b4780f9e2cdf00f')
.then(res => res.json())
.then(data => this.setState({ data }));
}
render() {
return React.createElement(App, { data: this.state.data });
}
}
ReactDOM.render(
<AppContainer />,
document.getElementById('container')
);
これは、最初にコンポーネントをレンダリングしたときにフェッチが完了しなかったためです。 – Li357
これで、フェッチが完了するまでレンダリングを遅らせることができますか?お返事をありがとうございます。 – ZCKVNS