当前位置: 首页 > 面试题库 >

在React中,如何检测我的组件是从客户端还是从服务器渲染?

谭凯
2023-03-14
问题内容

我正在构建同构应用程序,但是我正在使用仅在客户端上呈现的第三方组件。因此,特别是对于此组件,仅在客户端渲染时才需要渲染。

如何检测我是在客户端还是在服务器上?我正在寻找类似isClient()或的东西isServer()


问题答案:

在内部,React使用一个ExecutionEnvironment为此调用的实用程序。它实现了一些有用的属性,例如canUseDOMcanUseEventListeners。该解决方案本质上只是此处所建议的。

实施 canUseDOM

var canUseDOM = !!(
  (typeof window !== 'undefined' &&
  window.document && window.document.createElement)
);

我这样在我的应用程序中使用

var ExecutionEnvironment = require('react/node_modules/fbjs/lib/ExecutionEnvironment');
...
render() {
  <div>{ ExecutionEnvironment.canUseDOM ? this.renderMyComponent() : null }</div>
}

编辑
这是一个未记录的功能,不应直接使用。它的位置可能会因版本而异。我通过显示Facebook团队在内部使用的内容来分享这种说法,以表达“这是您能做到的最好”。您可能需要将此代码(很小的)复制到您自己的项目中,因此您不必担心跟上版本之间的位置或潜在的重大更改。

*另一个 *编辑
有人为此代码创建了一个npm软件包。我建议使用它。

npm install exenv --save


 类似资料:
  • 我正在尝试使用ExpressJS和Coffeescript制作一个网络应用程序,它从亚马逊、LastFM和必应的网络应用程序接口中提取数据。 用户可以从特定乐队请求特定专辑的价格、即将到来的音乐会时间和乐队的位置等数据,等等...诸如此类的东西。 我的问题是:我应该使用和在客户端进行这些API调用,还是应该在服务器端进行?我已经完成了客户端请求;我如何从服务器端进行API调用 我只想知道最佳实践是

  • 不久前,我使用类实现了一些代码来使用REST Api。 这段代码似乎在测试和生产环境(每个环境访问一个测试/生产 URI)下都非常有效。最近,我们开始仅在生产环境中获得 HttpRequestException: 这似乎有点奇怪,所以我用Postman发送相同的消息,它工作得很好。我不确定为什么我们的代码失败了,而邮递员却在工作。我更改了json数据中的一个参数(状态从“NY”变为“NV”)和我们

  • 问题内容: 我刚刚开始研究ReactJS,发现它为您提供了两种渲染页面的方法:服务器端和客户端。但是,我不知道如何一起使用。是使用两种单独的方法来构建应用程序,还是可以将它们一起使用? 如果可以一起使用,该如何做- 我们是否需要在服务器端和客户端重复相同的元素?或者,我们是否可以仅在服务器上构建应用程序的静态部分,而在客户端构建动态部分,而无需与已经预先渲染的服务器端建立任何连接? 问题答案: 对

  • 我刚刚开始研究ReactJS,发现它提供了两种呈现页面的方法:服务器端和客户端。但是,我不明白如何一起使用它。构建应用程序有两种不同的方法,还是可以一起使用? 如果我们可以一起使用它,如何做到这一点——我们需要在服务器端和客户端复制相同的元素吗?或者,我们可以只在服务器上构建应用程序的静态部分,在客户端构建动态部分,而不与已经预渲染的服务器端建立任何连接吗?

  • 在客户机-服务器体系结构中,当模拟客户机和模拟服务器时,最好的方法是什么。我理解单元测试应该只测试给定的类,每个依赖对象都被模拟,而集成测试应该测试整个特性。当谈到API调用时,我感到困惑的是,我应该模拟用于API调用的客户机,还是应该使用一些服务器模拟框架,让真正的客户机调用模拟服务器。 在这种情况下,我应该(不是强制性的)测试我是否使用了正确的API url、正确的方法以及在查询参数或请求正文