Using reactjs with requirejs Using reactjs with requirejs reactjs reactjs

Using reactjs with requirejs


So I figured it out myself.

I got the necessary files and instructions from this repo: jsx-requirejs-plugin.

Once I had jsx plugin and modified version of JSXTransformer, I changed my code as instructed in the repository :

require.config({  // ...  paths: {    "react": "path/to/react",    "JSXTransformer": "path/to/JSXTransformer",    "jsx": "path/to/jsx plugin"    ...  }  // ...});

Then, I could reference JSX files via the jsx! plugin syntax. For example, to load the Timer.jsx file that is in a components directory:

require(['react', 'jsx!components/Timer'], function (React, Timer) {   ...   React.renderComponent(<Timer />, document.getElementById('timer'));   ...});

I could also access .js files that had jsx syntax in them using the same code:

require(['react', 'jsx!components/Timer'], function (React, Timer) {   ...   React.renderComponent(<Timer />, document.getElementById('timer'));   ...});

Also, I did not need to put /** @jsx React.DOM */ at the top of files using jsx syntax.

Hope it helps.


React tools (JSX included) have been deprecated in favor of Babel (https://facebook.github.io/react/blog/2015/06/12/deprecating-jstransform-and-react-tools.html). I cannot find a way to do this without a "transpiling" step, so this is my solution with grunt.

You can instal grunt-babel (npm install grunt-babel) and configure a task like the following:

babel: {    options: {        sourceMap: false,        modules: "common"    },    dist: {        files: [{            expand: true,            src: ['js/components/*.jsx'],            dest: 'dist',            ext:'.js'       }]    }}

Just add it to your list of grunt tasks:

grunt.registerTask('default', ['clean', 'copy', 'babel', 'http-server']);

Babel will transpile your JSX to JS files that can be specified as RequireJS dependencies with no additional configuration.