javascript - 如何在布局呈现之前检查 Gatsby 网站是否已作为 PWA 启动?
问题描述
我已经附加了一个全局上下文提供程序,通过gatsby-browser
它提供了该站点是否已作为 PWA 启动的状态。gatsby-ssr
wrapRootElement
此状态在我的Layout
组件中用于有条件地在屏幕底部为 PWA 呈现应用程序标签栏,或者在屏幕顶部呈现导航栏。我正在使用wrapPageElement
ingatsby-browser
挂载Layout
到所有页面。
//interfaceContext.js
export const InterfaceContext = React.createContext()
const Provider = ({ children }) => {
const [appInterface, setAppInterface] = useState(true)
useEffect(() => {
if (
!(
navigator.standalone ||
window.matchMedia("(display-mode: standalone)").matches
)
) {
setAppInterface(false)
}
}, [])
export default ({ element }) => <Provider>{element}</Provider>
//gatsby-ssr.js & gatsby-browser.js
export const wrapRootElement = Provider
export const wrapPageElement = ({ element }) => <Layout>{element}</Layout>
//layout.js
const Layout = ({ children }) => {
const context = useContext(InterfaceContext)
return (
<>
{context.appInterface ? <AppBar /> : <DesktopNav />}
...
目前这可行,但我认为在构建和初始加载或重新加载时的服务器端渲染期间正在使用默认状态,我的站点会在我的上下文提供程序更新它之前闪烁默认导航位置。如何在布局呈现到屏幕之前更新此状态以防止闪烁?
解决方案
推荐阅读
- api - 开放的天气 api 数据正在进入第一个控制器,但我想在另一个带有标签的控制器中显示城市和温度湿度。如何?
- python - Python(硒)循环
- c - 从 WinAPI C 中的 "1 + 1" = 2 之类的字符串计算数据
- sum - PowerBI - 如何让 DAX 函数与过滤器/条件相加?
- ubuntu - 未找到时间戳 proto 和其他 proto 文件,即使它们存在于 /usr/local/bin/include/google/protobuf
- airflow - 使用 Airflow,从同一个循环中,成功的 API 响应继续执行下一个任务,但带有错误的响应具有单独的任务,显示为失败
- .net - SoapCore 读Soap1.1
- selenium - Heroku上的硒超时
- postgresql - Postgres与spring数据的相似性函数
- python - 如何使用 Inventor API 和 Python 访问装配体中出现的工作平面