所以这就是 firebase 文档描述 get token 函数的方式:
getToken ( options ? : { serviceWorkerRegistration ?: ServiceWorkerRegistration ; vapidKey ?: string } ) : Promise <string>
可选选项:{ serviceWorkerRegistration?: ServiceWorkerRegistration; vapidKey?: 字符串 }
可选的 serviceWorkerRegistration?: ServiceWorkerRegistration 接收推送消息的服务工作者注册。如果未明确提供注册,则您的根位置需要有 firebase-messaging-sw.js。有关更多详细信息,请参阅检索当前注册令牌。
我只是想弄清楚如何在我的代码中使用 service worker 选项。我是不是像这样将文件位置放在 getToken('/file-location') 中?或者我是否导入了一个注册我的自定义 Firebase Service Worker 的函数?我可能只是愚蠢,但这些文档是准系统。
我对此有非常简单的用例,基本上,如果屏幕聚焦,我希望该函数运行,如果没有,则不运行。
const isFocused = useIsFocused();
const onViewRef = useRef(({ viewableItems }) => {
if (!isFocused) return;
//code to run
});
Run Code Online (Sandbox Code Playgroud)
这是该屏幕的堆栈:
const MyStack = () => {
return (
<Stack.Navigator headerMode="none">
<Stack.Screen
component={MyStackComponent}
name="My"
/>
</Stack.Navigator>
);
};
Run Code Online (Sandbox Code Playgroud)
这是 tabNavigator 中使用的堆栈
<Tab.Screen
component={MyStack}
name="My"
/>
<Tab.Screen
component={Other Stack}
name="Other"
/>
Run Code Online (Sandbox Code Playgroud)
所以基本上每当我进入应用程序上的任何其他选项卡时,使用 useIsFocused 挂钩的文件都应该返回 false,对吧?因为现在无论如何它都会返回 true,而且我不能让该函数一直运行。有什么指点吗?
我正在尝试确定生成的文本文件上的错误消息是否包含单词“ multiple”,“ Database”或两者。对于每个文本文件,我正在评估它包含的单词,而现在仅使用消息传递框查看其评估方式。从我可以看出,第一个if语句是唯一返回true的语句,即使我在文件夹中拥有的两个文本.txt文件每个都只有一个关键字。下面的代码。
我搜索了是否在else if语句中的感叹号位置错误,但是从我发现的情况来看,它看起来是正确的。
string[] files = Directory.GetFiles(@"C:\temp\test", "*.txt");
var multi = "multiple";
var data = "Database";
for (int i = 0; i < files.Length; i++)
{
var sheet = File.ReadAllText(files[i]);
if (multi.Any(sheet.Contains) && data.Any(sheet.Contains))
{
MessageBox.Show("Both");
}
else if (multi.Any(sheet.Contains) && !data.Any(sheet.Contains))
{
MessageBox.Show("Just Multiple");
}else if(!multi.Any(sheet.Contains) && data.Any(sheet.Contains))
{
MessageBox.Show("Just Database");
}
Run Code Online (Sandbox Code Playgroud)
因此,第一个文件中只有单词“ multiple”。第一个if语句应该返回false,因为两个条件都不满足,因为第一个any方法返回true,而第二个则不应该。但是据我所知,两者都返回了真实。