react-native - 如何使用钩子检测反应原生应用程序的首次启动?
问题描述
我正在尝试在 react native 中编写一个仅在首次下载应用程序时显示的屏幕,并且我找到了一些显示我正在尝试做的事情的参考代码,但我不确定如何使用 react hooks 来实现它他们在这里使用的类组件样式。我还发现 componentWillMount() 已被弃用,所以我想弄清楚用哪个钩子来替换它?
请注意,checkIfFirstLaunch 是我编写的一个函数,用于检查应用程序是否是第一次启动。我基本上需要帮助把它变成一个功能组件。
import React from 'react';
import { Text } from 'react-native';
import checkIfFirstLaunch from './utils/checkIfFirstLaunch';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
isFirstLaunch: false,
hasCheckedAsyncStorage: false,
};
}
async componentWillMount() {
const isFirstLaunch = await checkIfFirstLaunch();
this.setState({ isFirstLaunch, hasCheckedAsyncStorage: true });
}
render() {
const { hasCheckedAsyncStorage, isFirstLaunch } = this.state;
if (!hasCheckedAsyncStorage) {
return null;
}
return isFirstLaunch ?
<Text>This is the first launch</Text> :
<Text>Has launched before</Text>
;
}
}
解决方案
您可以使用useEffect做与 componentDidMount 相同的工作(componentWillMount 已弃用且不存在于功能组件中)
在您的测试未执行时返回 null,然后检查您的布尔值
import React, { useEffect, useState } from 'react';
import { Text } from 'react-native';
import checkIfFirstLaunch from './utils/checkIfFirstLaunch';
const App = () => {
const [isFirstLaunch, setIsFirstLaunch] = useState(null)
useEffect(() => {
checkIfFirstLaunch().then((isFirstLaunch) => {
setIsFirstLaunch(isFirstLaunch)
});
}, [])
if (isFirstLaunch === null) return null
return isFirstLaunch ?
<Text>This is the first launch</Text> :
<Text>Has launched before</Text>
;
}
export default App
推荐阅读
- php - 如何在 joomla 模块参数中使用自定义语言值?
- java - 图像阵列旋转
- php - AngularJS 将 api 请求从 php 更改为 JSON
- javascript - Socket.io 两个客户端只在一个方向通信
- javascript - 访问 Google Firestore 集合的最后 N 个文档
- java - 如何在 Spring Boot REST API 上设置超时?
- batch-file - 使用 7zip 命令行批处理时如何排除文件扩展名
- google-apps-script - Google Apps 脚本 onEdit() 触发器未执行
- c - 如何理解这个指向 C 中数据结构的指针?
- machine-learning - LSTM门中的多层有用吗?