【问题标题】:How to get the state updated of input field of google map api in React app如何在 React 应用程序中获取谷歌地图 API 输入字段的状态更新
【发布时间】:2020-09-03 09:24:51
【问题描述】:

根据google map api的官方文档, 我试图在我的React 应用程序中实现自动完成搜索input,如下所示:

import React, { Component } from 'react';

export class App extends Component {
    state = {
        location: ''
    };

    handleChange = (e) => {
        this.setState({ location: e.target.value });
    };
    render() {
        function initAutocomplete() {
            var input = document.getElementById('pac-input');
            var searchBox = new window.google.maps.places.SearchBox(input);
        }
        initAutocomplete();
        return (
            <input
                defaultValue={this.state.location}
                onChange={this.handleChange}
                id="pac-input"
                className="controls"
                type="text"
                placeholder="Search your College"
            />
        );
    }
}

export default App;

我设法让它正常工作。但是,我看到的唯一问题是,每当我选择/单击自动完成选项时,输入栏的值都会使用所选地址更新,但不会处于状态。 您可以查看此short video demo,并请建议我应该做哪些更改才能使状态管理正常工作?

【问题讨论】:

  • 您能否提供一个代码沙盒或堆栈闪电战,以便我们可以从我们这边重现此问题?
  • @evan 给你:CodeSandBox 确保在反应开发工具中查找this.state.location
  • 谢谢,我可以看到问题了。让我在一分钟内给你一个完整的答案。

标签: reactjs google-maps input google-maps-api-3 react-state-management


【解决方案1】:

这里的问题是您正在监听输入的 onChange 事件,而不是自动完成的 places_changed 事件,因此当您从自动完成列表中选择一个位置时,输入的 onChange 函数不会运行地方建议。尝试如下修改您的代码:

import React, { Component } from "react";

export class App extends Component {
  state = {
    location: ""
  };

  componentDidMount() {
    const app = this;
    function initAutocomplete() {
      var input = document.getElementById("pac-input");
      var searchBox = new window.google.maps.places.SearchBox(input);
      searchBox.addListener("places_changed", function() {
        app.setState({ location: document.getElementById("pac-input").value });
      });
    }
    initAutocomplete();
  }

  handleChange = e => {
    this.setState({ location: e.target.value });
  };

  render() {
    return (
      <input
        defaultValue={this.state.location}
        onChange={this.handleChange}
        id="pac-input"
        className="controls"
        type="text"
        placeholder="Search your College"
      />
    );
  }
}

export default App;

【讨论】:

  • 它正在工作,但如果我键入并选择 MIT 然后它没有给我完整的地址,而不是在状态中显示M.I.T, Massachusetts Avenue, Cambridge, MA, USA,this.state 的值显示如下@987654326 @ 还有一种情况是我输入 DY Patil 来获取我的大学名称 D Y Patil School Of Engineering Lohegaon, Lohegaon, Pune, Maharashtra, India。该州的价值向我展示了一些更奇怪的东西,例如Dr D Y Patil Knowledge city, Charholi, Lohegaon, Pune, Maharashtra 412105, India
  • 哦,我明白了,所以您不需要 formatted_address。那么这更容易,使用document.getElementById("pac-input").value。我将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
相关资源
最近更新 更多