Node.js 反应同构

Node.js 反应同构,node.js,reactjs,isomorphic-javascript,Node.js,Reactjs,Isomorphic Javascript,我正在使用Node.js和ReactJS构建同构应用程序 我遇到过这样一种情况:在一些同构的React组件(在客户端和服务器端都呈现)中,我只需要包含客户端依赖项(例如一些通知库) 让它在服务器/客户端都工作(编译)的最佳方式是什么 p.S:我对可能的解决方法没有什么想法,比如检查浏览器环境变量(例如,一些窗口类型!==“未定义”)等等。但我不确定这是一个好方法。使用生命周期方法componentDidMount,该方法在服务器上未调用,而不是检查窗口是否未定义 “缺点”是,如果客户端依赖项增强

我正在使用
Node.js
ReactJS
构建同构应用程序

我遇到过这样一种情况:在一些同构的
React
组件(在客户端和服务器端都呈现)中,我只需要包含客户端依赖项(例如一些通知库)

让它在服务器/客户端都工作(编译)的最佳方式是什么


p.S:我对可能的解决方法没有什么想法,比如检查浏览器环境变量(例如,一些
窗口类型!==“未定义”
)等等。但我不确定这是一个好方法。

使用生命周期方法
componentDidMount
,该方法在服务器上未调用,而不是检查窗口是否未定义


“缺点”是,如果客户端依赖项增强了某个元素,或者更改了该元素的任何属性,那么它将首先获得默认属性,因为它是在服务器端呈现的,当
componentDidMount
运行时,它将被更改,导致“闪烁”.

使用未在服务器上调用的生命周期方法
componentDidMount
,而不是检查窗口是否未定义


“缺点”是,如果客户端依赖项增强了某个元素,或者更改了该元素的任何属性,那么它将首先获得默认属性,因为它是在服务器端呈现的,当
componentDidMount
运行时,它将被更改,导致“闪烁”

如果你想从浏览器中删除服务器代码,还有一种方法可以做到这一点


另一种方法(webpack或browserify)是利用package.json中的。您可以这样做,服务器需要一个noop文件,浏览器需要一个公开客户端api的文件。

如果您使用的是browserify,我通常使用
process.browser
,这仅在Browserized代码中是正确的

如果你想从浏览器中删除服务器代码,还有一种方法可以做到这一点


另一种方法(webpack或browserify)是利用package.json中的。您可以这样做,服务器需要一个noop文件,浏览器需要一个公开客户端api的文件。

我已经在名为process.env.webpack的网页包配置文件中定义了变量,并且在我的代码中定义了当我需要bottstrap js或我刚刚编写的其他东西时的变量

  if(process.env.WEBPACK){
     //awesome lib included or scss or whatever
  }

我已经在名为process.env.webpack的网页包配置文件中定义了变量,并且在我的代码中定义了当我需要像bottstrap js之类的东西或我刚刚编写的其他东西时的变量

  if(process.env.WEBPACK){
     //awesome lib included or scss or whatever
  }

正如我对ex所说的,我需要包括
notificatoins
lib。我想包含它一次,因为我只需要在顶级React组件中包含
componentDidMount
,对吗?有没有一种方法可以安全地通过整个组件层次结构传递它(依赖项引用)?只要在需要的地方包含它,我的意思是你需要从某个地方需要它,或者你想有条件地加载一些javascript?我想我可以只全局包含一次,然后在需要时使用它。我不想在componentDidMount中需要它,这可能需要它很多次,这取决于挂载元素。是的,没错,这是正确的。如果它已经包含在全局范围内,那么您可以在您的组件中引用它,该组件可以位于层次结构中的任何位置。是。。例如,对于客户端来说,这是可以的,但NodeJ不理解这一点:)或者相反,正如我在ex中所说的那样。我需要包括
notificatoins
lib。我想包含它一次,因为我只需要在顶级React组件中包含
componentDidMount
,对吗?有没有一种方法可以安全地通过整个组件层次结构传递它(依赖项引用)?只要在需要的地方包含它,我的意思是你需要从某个地方需要它,或者你想有条件地加载一些javascript?我想我可以只全局包含一次,然后在需要时使用它。我不想在componentDidMount中需要它,这可能需要它很多次,这取决于挂载元素。是的,没错,这是正确的。如果它已经包含在全局范围内,那么您可以在您的组件中引用它,该组件可以位于层次结构中的任何位置。是。。例如,对于客户端来说这是可以的,但NodeJ不理解这一点:),反之亦然