为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过 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 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信