Javascript 反应功能不重新分配(let)或推入阵列
大家好,Js程序员,我有一个关于函数的独家新闻或变量的问题 我这里有这个代码是为了得到gecoder的职位Javascript 反应功能不重新分配(let)或推入阵列,javascript,reactjs,function,Javascript,Reactjs,Function,大家好,Js程序员,我有一个关于函数的独家新闻或变量的问题 我这里有这个代码是为了得到gecoder的职位 getPosition = pos => { let address; Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => { if (!err) { const data = (geoData.results[0].formatte
getPosition = pos => {
let address;
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
if (!err) {
const data = (geoData.results[0].formatted_address);
address = data;
}
}, apiKey);
console.log(address);// undefined
}
我试着使用一个数组并将结果放入其中
const address = [];
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
if (!err) {
const data = (geoData.results[0].formatted_address);
address.push(data);
}
}, apiKey);
console.log(address[0]);
有没有办法从字符串数据中获取值?
感谢您在回调定义/修改变量之前记录变量,从而产生意外结果 这应该起作用:
getPosition = pos => {
let address;
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
if (!err) {
const data = (geoData.results[0].formatted_address);
address = data;
}
// log INSIDE the callback!
console.log(address);
}, apiKey);
}
这也是:
// callback is not executed yet, don't log!
const address = [];
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
if (!err) {
const data = (geoData.results[0].formatted_address);
address.push(data);
}
// logs INSIDE the callback!
console.log(address[0]);
}, apiKey);
// callback is not executed yet, don't log!
如果您在react类组件中使用
getPosition
方法,那么您可以创建一个stateaddress
,并在其中存储数据,如下所示
import React from 'react';
export default class GetPosition extends React.Component {
state = {
address: []
}
getPosition = pos => {
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
if (!err) {
const data = (geoData.results[0].formatted_address);
this.setState({address: [...this.state.address, data]})
}
}, apiKey);
}
render() {
const address = this.state
console.log(address)
return (
<div>{address[0]}</div>
);
}
}
const address = [];
getPosition = pos => {
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
if (!err) {
const data = (geoData.results[0].formatted_address);
address.push(data);
}
}, apiKey);
}
console.log(address[0]);
我希望这会对您有所帮助,您应该了解这是问得最多的反应问题我不想使用状态,因为我需要列表中的返回,我认为这是js范围问题,因为我无法重写变量。我可以推入数组,但我不能将其用作返回,我认为这是一个同步问题和回调问题。这不是一个问题,只是JavaScript的工作方式。。。我强烈建议您遵循Niraj和我向您推荐的常见JS模式。在回调内部,一切正常,我需要回调外部的值。您不能,回调基本上就是这样工作的。。。JS是异步的,这是用这种语言必须处理的事情