reactjs - 无法在 React.js 中使用带有服务器端渲染 (SSR) 的窗口
问题描述
我正在尝试将 SSR 与我的 React 应用程序一起使用,但我正在努力使用 window,因为它仅在客户端可用。因此,我尝试了以下方法。
if (typeof window === "undefined" ? {} : window.innerWidth >= 768) {
windowScrollTop =
typeof window === "undefined" ? {} : window.pageYOffset / 3;
} else {
windowScrollTop = 0;
}
通过这样做,它可以工作,但是每次访问每个页面时屏幕都会闪烁。我认为这是因为服务器端被访问,并且窗口被分配为空typeof window === "undefined" ? {} : ...
,。访问客户端时,窗口可用。我猜这就是屏幕闪烁的原因。
有没有办法解决这个问题?我已经在测试服务器上托管了带有一些示例代码的网站。有谁知道如何处理window
问题?
解决方案
我有一个 SSR 应用程序并检查服务器或客户端是否像这样呈现。但是我不确定这是否是最佳实践,但它对我有用。
import React, { Component } from "react";
import SomeImportedComponent from "../SomeImportedComponent";
// Check if server or client is rendering
const hasWindow = (typeof window !== 'undefined') ? true : false;
class MyComponent extends Component {
render() {
return (
const options = {
innerWidth: hasWindow ? window.innerWidth : null,
pageYOffset: hasWindow ? window.pageYOffset : null,
}
return(
<SomeImportedComponent {...options} />
)
);
}
}
export default MyComponent;
推荐阅读
- javascript - 如果满足某些条件,则循环对象并为对象数组赋值 - vanilla JavaScript
- python-3.x - 如何在 Linux 上的 Anaconda 中安装 PyGObject?
- c# - 从基对象转换为派生对象,同时具有巨大的构造函数定义
- java - 使用 hasNextLine() 方法检查多行
- javascript - JavaScript:为每个具有冗余父属性的嵌套项创建一个新数组项
- sql - 如何使用 unpivot 函数在其他列中查找最小值来忽略字符串值
- azure-web-app-service - 外卡证书分配
- reactjs - 反应路由器,奇怪的行为,双路径
- git - 如何在 Windows 10 上为 git 编辑和打开 core.editor?
- mysql - 如何优化数据库中的架构