如何将AsyncStorage存储的数字(存储为字符串)转换为本机中的数字(我正在使用Expo)。
它可以将字符串转换为这样的数字:
myNum = Number('3'); // THIS WORKS
但这不起作用:
myNum = Number(this.state.myStateNum); // This does not work, returns zero
myNum = Math.floor(this.state.myStateNum); // This does not work, returns zero
我从AsyncStorage获取变量然后存储为状态,但我无法弄清楚为什么我无法将其转换为数字。
如果这有助于我使用async进行设置:
async function setItem(key, value) {
try {
await AsyncStorage.setItem(key, value);
console.log(key, value);
return value;
} catch (error) {
}
}
setVar = setItem('myStateNum', '3');
这就是我使用async的方式:
async componentWillMount() {
const myStateNumGet = await AsyncStorage.getItem('myStateNum');
if (myStateNumGet) {
this.setState({ myStateNum: myStateNumGet });
} else {
this.setState({ myStateNum: false });
}
}
任何建议/帮助都会很棒。
答案 0 :(得分:0)
试试这个......
myNum = parseInt(this.state.myStateNum);
您也可以尝试其他方法,但上述内容对您有用... https://coderwall.com/p/5tlhmw/converting-strings-to-number-in-javascript-pitfalls
答案 1 :(得分:0)
这是因为ASyncStorage.getItem()
返回Promise对象,而不是您期望的字符串。
您可以在此处找到有关此内容的更多信息:https://facebook.github.io/react-native/releases/0.23/docs/asyncstorage.html
就您的问题而言,我构建您的代码以接受对getItem的回调,这样您就可以在进行计算之前确保返回的值。代码看起来像这样。
AsyncStorage.getItem("myStateNum").then((result) => {
console.log(result);
this.setState({myStateEnum: result});
}).done();
您也可以尝试使用.value
来获取结果,例如let myStateNum = result.value
。在这个问题上相当生疏,但这些方法应该能够帮助你
如果有帮助,请告诉我。
答案 2 :(得分:0)