【问题标题】:How to lift state up in React from a response with Axios?如何从 Axios 的响应中提升 React 中的状态?
【发布时间】:2023-03-30 21:43:01
【问题描述】:

我有一个带有state 的父App.js 组件和一个带有state 的子MapContainer.js。子组件显示谷歌地图,我正在使用以下函数将状态从子组件提升到父组件:

mapClicked = (event) => {
     const { markers } = this.state;
     let url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng='+ event.latLng.lat() + ',' + event.latLng.lng()+ '&key='+ 'MYGOOGLEAPIKEY' +'';
     axios.get(url).then(response => this.setState({
       googleReverseGeolocation:response.data.results,
       markers:[{  position:{lat:event.latLng.lat(),lng:event.latLng.lng()}  }, ...markers],
       latClick:event.latLng.lat(),
       lngClick:event.latLng.lng()
     }))   
     this.props.onResultChange(event.latLng.lat(),event.latLng.lng(), **NEED A VALID 3RD ARGUMENT**)    
   }

父组件的相关函数如下所示:

 onResultChange(x,y,info){
    this.setState(
      {
        lat:x,
        lng:y,
        clickedInfoObject:info
      }
    )
  }

lat:xlat:y 来自 onResultChange() 的子组件根据传递给函数的值正确更新,即 event.latLng.lat()event.latLng.lng()。但是我不能在我的 axios 请求中使用response.data.results,因为该值仅在 axios 请求的范围内有效。 如何插入函数 onResultChange(event.latLng.lat(),event.latLng.lng(), **NEED A VALID 3RD ARGUMENT**) 的第三个参数来提升所有 3 个参数的状态?

【问题讨论】:

    标签: reactjs google-maps axios


    【解决方案1】:

    如果可以在请求返回时调用onResultChange,那么这应该可以:

    mapClicked = event => {
      const lat = event.latLng.lat();
      const lng = event.latLng.lng();
      let url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=MYGOOGLEAPIKEY`;
      axios.get(url).then(response => {
        const { markers } = this.state;
        this.setState({
          googleReverseGeolocation: response.data.results,
          markers: [{ position: { lat, lng } }, ...markers],
          latClick: lat,
          lngClick: lng
        });
        this.props.onResultChange(lat, lng, response);
      });
    };
    

    【讨论】:

    • 不会的。它会引发类似的错误,因为在调用之外未定义响应
    • 你在通话之外是什么意思?在哪里?
    • 哦,对不起,没看到括号,你完全正确!已解决
    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多