我有一个名为SearchLocationForm.js的Reaction类组件,它是App.js的子级.在SearchLocationForm.js的内部,我有下面的代码

    constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this);
        this.state = {
           error: null,
           isLoaded: false,
           coordinates: [] 
        }
        this.appid = this.props.appid;
    }

    handleSubmit(location) {

        fetch(
            `http://api.openweathermap.org/geo/1.0/direct?q=${location}&appid=${this.props.appid}`
        )
        .then(res => res.json())
        .then(resp => this.setState({coordinates: [resp.lat, resp.lon]}))
        .catch((error) => {
            console.error("there has been an issue with te GeoCode API Call", error)
        })

    }

    render() {
        return (
            <LocationInput className="searchLocationForm" handleSubmit={this.handleSubmit}/>
        )
    }

我正在try 弄清楚如何使用setState()方法用API响应更新组件状态,然后将其提升到App.js组件,以便进行后续调用.

我已经找到了关于这个问题的许多答案,并try 了许多解决方案,但到目前为止似乎都没有奏效.您认为在我的代码中发生了什么似乎导致了这个问题?谢谢!

推荐答案

如果您只想更新坐标,而其他状态保持不变,则必须使用这样的扩散运算符

handleSubmit(location) {
 
  fetch(`http://api.openweathermap.org/geo/1.0/direct?q=${location}&appid=${this.props.appid}`)
      .then(res => res.json())
      .then(resp => this.setState({...thia.state, coordinates: [resp.lat, resp.lon]}))
      .catch((error) => {
          console.error("there has been an issue with te GeoCode API Call", error)
   })

}

如果希望将状态提升到app.js,则必须在app.js上定义状态并从此组件设置状态.阅读有关将状态从here提升到更多的信息

Javascript相关问答推荐

Webpack将懒惰加载的模块放入主块中

即使设置了父级的最大高度,固定位置的分区内容也不会滚动?

更新Reduxstore 中的状态变量,导致整个应用程序出现不必要的重新渲染

如何使用JavaScript动态地将CSS应用于ToDo列表?

设置默认值后动态更新japbox或调色板

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

如何从一个列表中创建一个2列的表?

将旋转的矩形zoom 到覆盖它所需的最小尺寸&S容器

使用GraphQL查询Uniswap的ETH价格

保持物品顺序的可变大小物品分配到平衡组的算法

对网格项目进行垂直排序不起作用

如何在箭头函数中引入or子句?

从另一个数组中的对应行/键值对更新数组中的键值对对象

如何 for each 输入动态设置输入变更值

令牌JWT未过期

删除元素属性或样式属性的首选方法

如何用javascript更改元素的宽度和高度?

调用特定数组索引时,为什么类型脚本不判断未定义

Promise.race()返回已解析的promise ,而不是第一个被拒绝的promise