私はその内部にGoogleマップのインスタンスを保持するReactコンポーネントを持っています。 Meteorをインフラストラクチャに使用していますが、問題はReactコンポーネントが同期してレンダリングされることですが、サーバー側の変数を取得するには非同期にする必要があります。この状況を適切に処理するにはどうすればよいでしょうか?ここに私のスニペットは以下です:非同期Meteor.call内の反応コンポーネント
import { Meteor } from 'meteor/meteor';
import React from 'react';
import { Gmaps, Marker, InfoWindow, Circle } from 'react-gmaps';
// Goals for this:
// - get the location of the user dynamically
// - see other users as markers
const coords = {
lat: 51.5258541,
lng: -0.08040660000006028,
};
export default class App extends React.Component {
componentWillMount() {
const params = {
v: '3.exp',
key: null,
};
Meteor.call('googleMapsApiKey', (err, res) => {
if (!err) {
params.key = res;
console.log('params', params);
}
});
}
onMapCreated(map) {
map.setOptions({
disableDefaultUI: true,
});
}
onDragEnd(e) {
console.log('onDragEnd', e);
}
onCloseClick() {
console.log('onCloseClick');
}
onClick(e) {
console.log('onClick', e);
}
onDragStart(e) {
console.log('onDragStart', e);
}
render() {
return (
<Gmaps
width={'800px'}
height={'600px'}
lat={coords.lat}
lng={coords.lng}
zoom={12}
loadingMessage={'Be happy'}
params={params}
onMapCreated={this.onMapCreated}
>
<Marker
lat={coords.lat}
lng={coords.lng}
draggable
onDragStart={this.onDragStart}
/>
<InfoWindow
lat={coords.lat}
lng={coords.lng}
content={'Hello, React :)'}
onCloseClick={this.onCloseClick}
/>
<Circle
lat={coords.lat}
lng={coords.lng}
radius={500}
onClick={this.onClick}
/>
</Gmaps>
);
}
}
ここで同期/非同期の問題を示して証拠コンソールのエラーです:
renderメソッドは非同期応答が発生するのを待つていないようです。これに対処するベストプラクティスは何ですか?バベルのブログから
:
これはうまくいきましたか? – JordanHendrix