这是我的第一个问题!我试图通过类似的问题来解决我的问题,但是我无法使其适应我的代码(我承认我根本不理解这个问题的含义)
我正在制作一个小的RN项目,一个游戏,而且效果很好。我可以在0级开始游戏。该游戏有两个提示按钮,一个调用一个函数并显示答案的第一个字母,另一个显示完整的答案,然后更新状态为levelNumber,因此它将更新新问题,新答案等。
虽然这是一个很酷的代码,但是很酷,然后我添加了使用异步存储的函数“ readStoredLevel”。 它开始运行良好,因此,我的游戏从0级开始,然后在1秒后更改为1级(因为它是readStoredLevel函数的默认值)。 因此可见元素更新良好。然后,当我按下调用showFirstLetter函数的按钮时,它正常工作,但是当我按下调用showAnswer功能的按钮时,它得到了错误。请注意,在可行的情况下,这两个函数使用相同的变量ActualGame.Answer [firstletter];在程序中断的情况下,使用actualGame.Answer(这对我来说有点奇怪)
在我的仿真器中,我得到以下错误:Typeerror:未定义其不是objetc(评估ActualGame.Answer) 在我的控制台中,我收到错误消息:“无法在已卸载的组件上执行React状态更新。要修复,取消使用useEffect清理功能的所有订阅和异步任务”
我不知道如何解决。我试图将ActualLevel状态放入异步函数或.then()中。但它没有用。我尝试使用发现的useEffect()的示例,但我根本不了解发生了什么以及如何使用useEffect()。
在我的代码下面(我来自阿根廷,我引入了变量名,所以希望您能理解它,否则,对不起我的英语水平!!
import React, {useState,useEffect } from 'react';
import AsyncStorage from '@react-native-community/async-storage';
import trivia from '../data/trivia.json'
const gameScreen = props => {
const [actualLevel, setactualLevel] = useState(0);
const readStoredLevel = async () => {
try {
storedLevel = await AsyncStorage.getItem('storedLevel') || '1';
} catch (error) {
// Error retrieving data
console.log(error.message);
} return storedLevel;
}
readStoredLevel().then(()=>{setactualLevel(storedLevel)})
const gameNumber = props.navigation.getParam('id');
const gameName = props.navigation.getParam('gameName');
const gameQuestion = props.navigation.getParam('gameQuestion');
var selectedGame=[];
if (gameName === "trivia") {
selectedGame=trivia;
}
const actualGame=selectedGame[actualLevel];
const showFirstLetter=()=>{
Alert.alert ("La letra nº"+(firstletter+1)+" es :",
actualGame.Answer[firstletter],
[
{
text: 'Gracias',
}],);
const seeAnswer= ()=> {
Alert.alert ("La Answer es:", actualGame.Answer, [
{
text: 'Gracias',
onPress: toNextLevel()
}],);
}
return (
);
export default gameScreen;