React JS Server side issue - window not found

Jan Omacka

Hi I'm trying to use react-rte in my reactJS project. I have server side rendering and every time I want to use this package I get:

return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());
                               ^
ReferenceError: window is not defined

I guess the problem might be with isomorphic-tools but I don't know how to defer importing package to the client where window is going to be defined already.

Tony Tai Nguyen

If you're doing server side rendering, there's a good chance that the global window object is going to be undefined because that is only something the client will understand.

Note: Initially, when you start up your project its going to render out a complete string of your DOM (at this point it will not know about window because it is server side, but then re-render with the client-side code to which your window object will be available!

There is a workaround that I am using in this case. This is what I have for my webpack plugin:

new webpack.DefinePlugin({
  'process.env.NODE_ENV': isDevelopment ? '"development"' : '"production"',
  'process.env.BROWSER': JSON.stringify(true),
  __DEV__: isDevelopment
}),

So I use process.env.BROWSER to my advantage because it will be defined as undefined if it is server side, and it will be true if the client side is done rendering.

Since everything just stops working when there isn't a window object on the server side we can add this:

const mySpecialWindowFunction = () => {

  /* START HACK */
  if (!process.env.BROWSER) {
    global.window = {}; // Temporarily define window for server-side
  }
  /* END HACK */

  return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());
};

That way, your console won't scream at you and doesn't stop the server side rendering, to which you can now carry on with your glorious day! Although I have to admit that this is a bit Hacky, but it gets the job done because all we want to do is let the server side render out the initial DOM string and then let the client-side take over.

Also Note: Don't worry about setting window as an empty object, it will be back to normal once the client-side finishes rendering.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Does React.js require server side?

From Dev

Render React JS server side using .net

From Dev

Node.js: How to open an image window on server side?

From Dev

Routes on server & client side - React.js & Node.js

From Dev

Backgrid sort issue server side

From Dev

jquery autocomplete issue server side

From Dev

jquery autocomplete issue server side

From Dev

React JS : Migrate from server rendering to pure client side

From Dev

How to send data from server-side (Express.js) to client-side (React.js)?

From Dev

How to use components that use `window` reference in React with server-side rendering?

From Dev

react server side rendering with client side routing

From Dev

react server side rendering with client side routing

From Dev

Meteor + React : Server side routes?

From Dev

React - server side component rendering

From Dev

React - server side component rendering

From Dev

React-Stormpath on server side

From Dev

server side issue for Push notification in ios

From Dev

Datatables server side processing pagination issue

From Dev

What is the server side issue that could cause the MethodNotAllowedHttpException

From Dev

Meteor server side routes not being found

From Dev

Meteor server side routes not being found

From Dev

Server side and Client side broswer width and bootstrap carousel issue in php

From Dev

React.js server side rendering with Java [without Node.js]

From Dev

How to use React.js to render server-side template on Sails.js?

From Dev

React.js server side rendering with Java [without Node.js]

From Dev

Socket server on client side js?

From Dev

Socket server on client side js?

From Dev

Keeping session alive after page refresh with server side rendering using react.js

From Dev

React.js C# server side rendering *without* ASP.NET MVC

Related Related

  1. 1

    Does React.js require server side?

  2. 2

    Render React JS server side using .net

  3. 3

    Node.js: How to open an image window on server side?

  4. 4

    Routes on server & client side - React.js & Node.js

  5. 5

    Backgrid sort issue server side

  6. 6

    jquery autocomplete issue server side

  7. 7

    jquery autocomplete issue server side

  8. 8

    React JS : Migrate from server rendering to pure client side

  9. 9

    How to send data from server-side (Express.js) to client-side (React.js)?

  10. 10

    How to use components that use `window` reference in React with server-side rendering?

  11. 11

    react server side rendering with client side routing

  12. 12

    react server side rendering with client side routing

  13. 13

    Meteor + React : Server side routes?

  14. 14

    React - server side component rendering

  15. 15

    React - server side component rendering

  16. 16

    React-Stormpath on server side

  17. 17

    server side issue for Push notification in ios

  18. 18

    Datatables server side processing pagination issue

  19. 19

    What is the server side issue that could cause the MethodNotAllowedHttpException

  20. 20

    Meteor server side routes not being found

  21. 21

    Meteor server side routes not being found

  22. 22

    Server side and Client side broswer width and bootstrap carousel issue in php

  23. 23

    React.js server side rendering with Java [without Node.js]

  24. 24

    How to use React.js to render server-side template on Sails.js?

  25. 25

    React.js server side rendering with Java [without Node.js]

  26. 26

    Socket server on client side js?

  27. 27

    Socket server on client side js?

  28. 28

    Keeping session alive after page refresh with server side rendering using react.js

  29. 29

    React.js C# server side rendering *without* ASP.NET MVC

HotTag

Archive