React native,setTimeout 在 useEffect 内部调用时发出奇怪的警告
React native, setTimeout gives weird warning when called inside useEffect
我最终想在应用执行 X 秒后满足特定条件时向用户显示模式。
然而,我在 android 上不断收到关于设置定时器很长一段时间(几分钟)的警告,但我的定时器只有几秒钟。
const surveyCheckTime = 3000; // X = 3 seconds
const App = () => {
// First Time Modal State
const [surveyVisibility, setSurveyVisibility] = useState(false);
const handleSurveyOpen = () => {
setSurveyVisibility(true);
};
const handleSurveyClose = () => {
setSurveyVisibility(false);
};
useEffect(() => {
const timer = setTimeout(() => {
console.log('0:FROM_APP: Checking for condition: ');
getData().then(
keyValue => {
console.log('0:FROM_APP: Completion status: ', keyValue);
if (keyValue === 'false' || keyValue === undefined) {
handleSurveyOpen();
}
},
error => {
// console.log('Survery_Error: ', error);
},
);
}, surveyCheckTime);
return () => clearTimeout(timer);
}, []);
return (
<View>
...
<SurveyModal
surveyVisibility={surveyVisibility}
handleSurveyClose={handleSurveyClose}
/>
</View>
)
getData() 是一个返回 keyValue 作为 promise 的异步函数。
export const getData = async (myKey = 'alreadyOpened') => {
try {
const value = await AsyncStorage.getItem(`@${myKey}`);
if (value !== null) {
// value previously stored
// console.log('FROM__getData: Stored previously: ', value);
return value;
}
} catch (e) {
// error reading value
console.log('ERROR:FROM__getData: Cannot read: ', e);
return 'fasle';
}
};
一切都很好,一切都按预期工作,但我每次都收到最后一行不同的警告:
(看到持续时间为 Y 毫秒的 setTimeout)Y 比我的 X 值高很多
有 个问题,但在我的案例中并不完全与 firebase 相关。 (虽然我确实使用 firebase 在另一个组件中获取数据,但 这不应该是问题)这是问题
我已经研究过 this,但是大多数解决方案要么更改 "node_modules" 要么禁用警告,而且主题已经过时了。
如果有更高效的超时处理方案最好
编辑:"firebase":“7.13.1”是导致获取数据时出现问题的原因
我使用的是导致此问题的已弃用的 firebase 集成(网络配置而不是 .json 文件)
我最终想在应用执行 X 秒后满足特定条件时向用户显示模式。
然而,我在 android 上不断收到关于设置定时器很长一段时间(几分钟)的警告,但我的定时器只有几秒钟。
const surveyCheckTime = 3000; // X = 3 seconds
const App = () => {
// First Time Modal State
const [surveyVisibility, setSurveyVisibility] = useState(false);
const handleSurveyOpen = () => {
setSurveyVisibility(true);
};
const handleSurveyClose = () => {
setSurveyVisibility(false);
};
useEffect(() => {
const timer = setTimeout(() => {
console.log('0:FROM_APP: Checking for condition: ');
getData().then(
keyValue => {
console.log('0:FROM_APP: Completion status: ', keyValue);
if (keyValue === 'false' || keyValue === undefined) {
handleSurveyOpen();
}
},
error => {
// console.log('Survery_Error: ', error);
},
);
}, surveyCheckTime);
return () => clearTimeout(timer);
}, []);
return (
<View>
...
<SurveyModal
surveyVisibility={surveyVisibility}
handleSurveyClose={handleSurveyClose}
/>
</View>
)
getData() 是一个返回 keyValue 作为 promise 的异步函数。
export const getData = async (myKey = 'alreadyOpened') => {
try {
const value = await AsyncStorage.getItem(`@${myKey}`);
if (value !== null) {
// value previously stored
// console.log('FROM__getData: Stored previously: ', value);
return value;
}
} catch (e) {
// error reading value
console.log('ERROR:FROM__getData: Cannot read: ', e);
return 'fasle';
}
};
一切都很好,一切都按预期工作,但我每次都收到最后一行不同的警告:
(看到持续时间为 Y 毫秒的 setTimeout)Y 比我的 X 值高很多
有 这不应该是问题)这是问题
我已经研究过 this,但是大多数解决方案要么更改 "node_modules" 要么禁用警告,而且主题已经过时了。
如果有更高效的超时处理方案最好
编辑:"firebase":“7.13.1”是导致获取数据时出现问题的原因
我使用的是导致此问题的已弃用的 firebase 集成(网络配置而不是 .json 文件)