gpt4 book ai didi

javascript - React-Native — 全局变量不变

转载 作者:行者123 更新时间:2023-11-30 20:43:11 24 4
gpt4 key购买 nike

我有两个单独的文件,第一个是使用第二个 (APIService.js) 获取不同 API 的组件 (List.js)。要更正提取,URL 需要接收全局变量。现在,我试图从 APIService 文件中的函数重新定义这些变量,但没有成功。在 API 调用 注释之前,变量在 APIService.js 中被重新定义。

我有两个问题:

  • 为什么全局变量 naptanId 没有被重新定义?
  • 是否可以从组件定义和传递这些变量?

伪代码

  • 检测信标
  • 重新定义 naptanId
  • 使用最近定义的变量获取组件 API
  • API调用完成
  • 数据传回组件
  • 设置状态

List.js

componentDidMount() {
// Executes first function
APIService._fetchStopPoint((resp1) => {
console.log("Stoppoint", resp1)
// ... and set the bus state with the first response
this.setState({
bus: resp1
});

// ... based on the response, convert array to string
const lines = (resp1.lines.map((line) => line.name)).toString()

// ... pass lines to sencond function
APIService._fetchArrivalTimes(lines, (resp2) => {
// .. and set the tube state with the second response
this.setState({
isLoading: false,
tube: resp2
});
});
});
}

APIService.js

// Variables 
// ***********************************************************************
let naptanId = undefined
let lines = undefined

let ice = '59333'
let mint = '57011'
let blueberry = '27686'

let nearestBeacon = undefined;
let newBeaconId = undefined;

let setIce = false;
let setBlueberry = false;
let setMint = false;


// Beacon detection
// ***********************************************************************
const region = {
identifier: 'Estimotes',
uuid: '354A97D8-9CAF-0DC7-CE0E-02352EBE90CD',
};

// Request for authorization while the app is open
Beacons.requestWhenInUseAuthorization();
Beacons.startMonitoringForRegion(region);
Beacons.startRangingBeaconsInRegion(region);
Beacons.startUpdatingLocation();

// Listen for beacon changes
const subscription = DeviceEventEmitter.addListener('beaconsDidRange', (data) => {

const ibeacons = data.beacons

// var lowestAccuracySeen = 0.5;
let lowestAccuracySeen = "immediate"

// Check if beacons are updating
if (ibeacons && ibeacons.length > 0) {
// Loop through beacons array
for (var i = 0; i < ibeacons.length ; i++) {
// Find beacons with same minor ...
var foundBeacon = ibeacons.find(function(closestBeacon) {
// ... and return the beacon the lowest accuracy seen
// return closestBeacon.accuracy.toFixed(2) < lowestAccuracySeen;
return closestBeacon.proximity == lowestAccuracySeen
});
// If found ...
if (foundBeacon) {
// ... define the lowest accuracy and the nearest beacon
lowestAccuracySeen = foundBeacon.accuracy;
nearestBeacon = foundBeacon;

// Identify what component to render against nearest beacon
setIce = nearestBeacon.minor == ice ? true : false;
setMint = nearestBeacon.minor == mint ? true : false;
setBlueberry = nearestBeacon.minor == blueberry ? true : false;

if (setIce) {

// THESE VARIABLES CANNOT BE REDEFINED
naptanId = "490004936E"
lines = "55"

} else if (setMint) {

} else if (setBlueberry) {

};
}
}
}
});

// API calls
// ***********************************************************************
class APIService {


// Fecth stop point info
static _fetchStopPoint(cb) {
console.log(naptanId, lines)


fetch(`https://api.tfl.gov.uk/StopPoint/${naptanId}`)
.then(stopData => {
try {
stopData = JSON.parse(stopData._bodyText); // Converts data to a readable format
cb(stopData, naptanId);
} catch(e) {
cb(e);
}
})
.catch(e => cb(e));
}

// Fetch arrival times info
static _fetchArrivalTimes(lines, cb) {

fetch(`https://api.tfl.gov.uk/Line/${lines}/Arrivals/${naptanId}`)
.then(arrivalData => {
try {
arrivalData = JSON.parse(arrivalData._bodyText);
arrivalTime = arrivalData
cb(arrivalData);
} catch(e) {
cb(e);
}
})
.catch(e => cb(e));
}

// Fetch status info
static _fetchStatus(lines) {

fetch(`https://api-argon.digital.tfl.gov.uk/Line/${lines}/Status`)
.then(statusData => {
try {
statusData = JSON.parse(statusData._bodyText); // Converts data to a readable format
cb(statusData);
} catch(e) {
cb(e);
}
})
.catch(e => cb(e));
}

}

module.exports = APIService;

最佳答案

处理这些全局变量(跨不同组件)的最简单方法是使用 AsyncStorage :

let response = await AsyncStorage.getItem('listOfTasks');  //get, in any components
AsyncStorage.setItem('listOfTasks', 'I like to save it.'); //set, in any components

对于性能更关键的全局变量,您还可以考虑 Realm Database (就像 iOS 和 Android 中的 CoreData、SQLite)。

关于javascript - React-Native — 全局变量不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com