reagent/docs/0.8-upgrade.md

1.8 KiB

0.8 Upgrade guide

The necessary changes depend on what environment you target, and how you want to provide React.

Browser - Cljsjs

Using Reagent itself with Cljsjs packages doesn't require changes, other than making sure you depend on the latest Cljsjs React packages, if you have direct dependencies to them.

If you use additional React packages, you need to update Cljsjs packages for these to use new React foreign-lib name, react instead of cljsjs.react. Subject to change, if this can be solved easily.

Browser - node modules

You can use :npm-deps and :install-deps compiler options to install the packages automatically.

If react, react-dom and create-react-class are available in node_modules directory, ClojureScript compiler will use these with Reagent. This doesn't depend on use of :npm-deps option! :npm-deps option is only about installing the dependencies, if packages are available in node_modules directory, they will be used.

You can use :shim-process compiler option to provide process.env.NODE_ENV constant which is used by JS code to enable development and production builds. ClojureScript compiler will automatically set this constant to production value when using :advanced optimizations. This enables the React production build.

NodeJS

Install react, react-dom and create-react-class npm packages, and ClojureScript should automatically use require to load React for Reagent.

Electron

???

React-native

https://github.com/drapanjanas/re-natal/issues/128

Common Problems

Mismatch with Cljsjs and npm packages

If you have one npm package installed, e.g. react, you also need to provide others (react-dom and create-react-class), else Cljsjs packages would be used for these, and packages from different sources don't work together.