React Geosuggest不会更新状态

时间:2016-11-19 09:28:04

标签: reactjs

我正在尝试创建一个天气应用程序,并使用外部组件'react-geosuggest'。

我的问题是,当我更新输入(SEE:onChange = {this.onInputChange})时,该函数不接受我的输入,也不改变状态,即我得到未定义。

有趣的是,我已将initialvalue设置为纽约,并且在提交时我得到结果,而不更改输入信息,因此问题在于更新输入信息并将其传递给函数handleOnSubmit。

我已经阅读了有关该组件的文档,但无法弄明白,它具有与简单相同的值,但有些东西不起作用。

谢谢!

  class SearchBar extends Component {
    constructor() {
      super()

      this.state = {city: 'New York'};
    }

    onInputChange = (e) => {
      this.setState({city: e.target.value});
    }

       handleOnSubmit = (e) => {
       e.preventDefault();
      this.props.fetchWeather(this.state.city);
      this.setState({city: ''});
      }

render () {
  return (
    <div>
        <form onSubmit={this.handleOnSubmit}>
          <Geosuggest
            initialValue={this.state.city}
            onChange={this.onInputChange}
            types={['(cities)']}
          />
          <button type="submit">Search</button>
        </form>
      </div>
    </div>
      );
      }
}

3 个答案:

答案 0 :(得分:0)

请改用e.currentTarget.value。有关详情,请参阅this question

也试试这个:

onChange={this.onInputChange.bind(this)}

如果您想更简洁,可以这样写:

<Geosuggest
   initialValue={this.state.city}
   onChange={(e)=> this.setState({city: e.currentTarget.value})}
   types={['(cities)']}
   />

答案 1 :(得分:0)

在构造函数上绑定事件,在render中设置value属性,并将setState移除为在handleOnSubmit事件中执行的空字符串。我担心最后一个是改变输入时不起作用的。

class SearchBar extends Component {
        constructor(props) {
          super(props);
          this.state = {city: 'New York'};
          this.onInputChange = this.onInputChange.bind(this);
        }

        onInputChange = (city) => {
            this.setState({city: city});
        }

        handleOnSubmit = (e) => {
             e.preventDefault();
             this.props.fetchWeather(this.state.city);
        }

        render () {
          return (
            <div>
                <form onSubmit={this.handleOnSubmit}>
                  <Geosuggest
                    initialValue={this.state.city}
                    value={this.state.city}
                    onChange={this.onInputChange}
                    types={['(cities)']}
                />
             <button type="submit">Search</button>
            </form>
          </div>
        </div>
       );
      }
    }

答案 2 :(得分:0)

您还可以使用onSuggestSelect获取所选地址的值:

calc_date

然后像这样访问组件:

<Geosuggest
  ref={el=>this._geoSuggest=el}
  placeholder="Search for address"
  onSuggestSelect={this.onSuggestSelect}
  country='us'
/>