亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 api 獲取數據并用它呈現子組件 - 反應谷歌地圖

如何通過 api 獲取數據并用它呈現子組件 - 反應谷歌地圖

海綿寶寶撒 2021-06-28 09:43:07
我必須文件:eventsMapPage.js (main) 和 Maps.js(child)。getEvents = async () => {const requestResponse = await request(BASE_API_URL + "/api/events", { method: "GET", headers: {}, body: {} });this.state.eventList = requestResponse.data;console.log('getEvents');console.log(this.state.eventList);}//fetching data from api in parent```getEvents = async () => {const requestResponse = await request(BASE_API_URL + "/api/events", {method:"GET", headers: {}, body: {} });     this.state.eventList = requestResponse.data;}```//Sent state with fetched data```<GoogleApiWrapper eventList={this.state.eventList} ></GoogleApiWrapper>```//Send data```let markerList = []export class MapContainer extends Component {    constructor(props) {        super(props);        this.state = {};        markerList = props.eventList;```//I want to put this fetched data to  Markers```return (            <Map google={google} zoom={14} onClick={this.onMapClick} style={mapStyles} initialCenter={initialCenter}>                {                    markerList.map(marker => {                        return (                            <Marker                                key={marker.id}                                onClick={this.onMarkerClick}                                title={marker.title}                                name={marker.name}                                position={{                                    lat: marker.lat,                                    lng: marker.lng                                }}                            />...```實際上,我只想在我的谷歌地圖中使用來自 web api 的標記。當我用數據發送硬編碼的 arrar{} 時,它可以工作,但是當我用這個 api 發送時。首先渲染孩子,然后從 api 中獲取。所以我的地圖上沒有任何標記。我讀到:a)componentWillMountb) 谷歌地圖上的事件,如 onChange 或 onBoundsChanged,但我不知道如何在我的項目中使用它。通常在 WPF 中我有綁定,這里谷歌地圖工作很奇怪。JS 應該在數據來的時候自動刷新。如何從api獲得標記?
查看完整描述

2 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

你直接變異之state類的,

this.state.eventList = requestResponse.data; //direct mutation

你永遠不會像這樣改變狀態,因為這不是改變狀態的正確方法,它不會重新渲染你的組件。

您必須使用setState來更改您的狀態,這將導致重新渲染并且您的組件將獲取數據。

this.setState({eventList : requestResponse.data})

還要確保在數據準備好時添加子組件,

{this.state.eventList.length > 0 && <GoogleApiWrapper eventList={this.state.eventList} ></GoogleApiWrapper>}



查看完整回答
反對 回復 2021-07-01
  • 2 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號