|
1 | 1 | ReactJS.NET |
2 | | -========= |
| 2 | +=========== |
3 | 3 | ReactJS.NET is a library that makes it easier to use Facebook's |
4 | | -[React](http://facebook.github.io/react/) and |
5 | | -[JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) from C#. |
| 4 | +[React](http://facebook.github.io/react/) and |
| 5 | +[JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) from C#. To get |
| 6 | +started, [take a look at the documentation](http://reactjs.net/getting-started/getting-started.html). |
6 | 7 |
|
7 | 8 | **It is currently under development and there is no stable release at the moment. |
8 | 9 | Coming soon!** |
9 | 10 |
|
10 | 11 | Features |
11 | | -========= |
12 | | - * On-the-fly **JSX to JavaScript compilation** for development purposes |
13 | | - * JSX to JavaScript compilation via popular minification/combination |
| 12 | +======== |
| 13 | + * On-the-fly [JSX to JavaScript compilation](http://reactjs.net/getting-started/getting-started.html) |
| 14 | + * JSX to JavaScript compilation via popular minification/combination |
14 | 15 | libraries: |
15 | | - * [ASP.NET Bundling and Minification](http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification) |
16 | | - * [Cassette](http://getcassette.net/) |
17 | | - * **Server-side component rendering** to make your initial render super-fast |
18 | | - (experimental!) |
19 | | - |
20 | | -Requirements |
21 | | -============ |
22 | | - * ASP.NET 4.0 or higher |
23 | | - * ASP.NET MVC 3, 4 or 5 |
24 | | - * [JSON.NET](http://james.newtonking.com/json) |
25 | | - * A JavaScript engine: |
26 | | - * [MsieJavaScriptEngine](https://github.com/Taritsyn/MsieJavaScriptEngine) - |
27 | | - Windows only and requires IE9 or above to be installed on the server |
28 | | - * Other engines coming soon |
29 | | - |
30 | | -Installation |
31 | | -============ |
32 | | - |
33 | | -Via released NuGet package |
34 | | --------------------------- |
35 | | -The best way of installing React.NET is via NuGet. There are several NuGet |
36 | | -packages available: |
37 | | - * [React](#) - The core React library. Contains the main functionality of React |
38 | | - and JSX. You will normally use this through an integration library like |
39 | | - React.Mvc4. |
40 | | - * [React.Mvc4](#) - Integration with ASP.NET MVC 4 and 5 |
41 | | - * [React.Mvc3](#) - Integration with ASP.NET MVC 3 |
42 | | - * [System.Web.Optimization.React](#) - Integration with |
43 | | - [ASP.NET Bundling and Minification](http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification). |
44 | | - Use this to combine and minify your JavaScript. |
45 | | - * [Cassette.React] - Integration with [Cassette](http://getcassette.net/) |
46 | | - |
47 | | -These packages can be installed either via the UI in Visual Studio, or via the |
48 | | -Package Manager Console: |
49 | | -``` |
50 | | -Install-Package React.Mvc4 |
51 | | -``` |
52 | | - |
53 | | -Now skip down to the [usage section](#usage) |
54 | | - |
55 | | -Via latest development build |
56 | | ----------------------------- |
57 | | -Development builds are automatically built after every change. Use these if you |
58 | | -want the very latest bleeding-edge version. These are located on a custom |
59 | | -package server (http://reactjs.net/dev/packages/) so you need to add this as a |
60 | | -package source in Visual Studio: |
61 | | - |
62 | | -1. Click Tools → NuGet Package Manager → Package Manager Settings |
63 | | -2. Click Package Sources |
64 | | -3. Click the plus icon, enter name as "React.NET Dev" and URL as |
65 | | - http://reactjs.net/dev/packages/ |
66 | | -4. When adding the packages to your application, manually select "React.NET Dev" |
67 | | - as the package source, and ensure "Include Prerelease" is enabled. |
68 | | - |
69 | | -Now skip down to the [usage section](#usage) |
70 | | - |
71 | | -Manual Installation |
72 | | -------------------- |
73 | | -1. Compile ReactJS.NET by running `build.bat` |
74 | | -2. Reference React.dll and React.Mvc4.dll (if using MVC 4) in your Web |
75 | | - Application project |
76 | | -3. See usage example below |
77 | | - |
78 | | -Usage |
79 | | -===== |
80 | | -Create your React components, ensuring you add the `/** @jsx React.DOM */` |
81 | | -docblock. |
82 | | - |
83 | | -```javascript |
84 | | -// HelloWorld.react.jsx |
85 | | -/** @jsx React.DOM */ |
86 | | -var HelloWorld = React.createClass({ |
87 | | - render: function () { |
88 | | - return ( |
89 | | - <div>Hello {this.props.name}</div> |
90 | | - ); |
91 | | - } |
92 | | -}); |
93 | | -``` |
94 | | - |
95 | | -On-the-Fly JSX to JavaScript Compilation |
96 | | ----------------------------------------- |
97 | | -Hit a JSX file in your browser (eg. `/Scripts/HelloWorld.react.jsx`) and observe |
98 | | -the magnificence of JSX being compiled into JavaScript with no precompilation |
99 | | -necessary. Note: This is good for fast iteration during development, but for |
100 | | -production you will want to precompile for best performance. |
101 | | - |
102 | | -ASP.NET Bundling and Minification Support |
103 | | ------------------------------------------ |
104 | | -ReactJS.NET supports the use of Microsoft's |
105 | | -[ASP.NET Bundling and Minification](http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification) |
106 | | -library to compile JSX into JavaScript and minify it along with all your other |
107 | | -JavaScript. Simply create a `JsxBundle` containing any number of JSX or regular |
108 | | -JavaScript files: |
109 | | - |
110 | | -```csharp |
111 | | -// In BundleConfig.cs |
112 | | -bundles.Add(new JsxBundle("~/bundles/main").Include( |
113 | | - // Add your JSX files here |
114 | | - "~/Content/HelloWorld.react.jsx", |
115 | | - "~/Content/AnythingElse.react.jsx", |
116 | | - // You can include regular JavaScript files in the bundle too |
117 | | - "~/Content/ajax.js", |
118 | | -)); |
119 | | -``` |
120 | | - |
121 | | -`JsxBundle` will compile your JSX to JavaScript and then minify it. For more |
122 | | -control (eg. if you want to run other transforms as well), you can use |
123 | | -`JsxTransform` directly: |
124 | | - |
125 | | -```csharp |
126 | | -// In BundleConfig.cs |
127 | | -bundles.Add(new Bundle("~/bundles/main", new IBundleTransform[] |
128 | | -{ |
129 | | - // This works the same as JsxBundle (transform then minify) but you could |
130 | | - //add your own transforms as well. |
131 | | - new JsxTransform(), |
132 | | - new JsMinify(), |
133 | | -}).Include( |
134 | | - "~/Content/HelloWorld.react.jsx" |
135 | | -)); |
136 | | -``` |
137 | | - |
138 | | -Server-Side Component Rendering |
139 | | -------------------------------- |
140 | | -Modify `App_Start\ReactConfig.cs` to reference your components |
141 | | - |
142 | | -```csharp |
143 | | -namespace MyApp |
144 | | -{ |
145 | | - public static class ReactConfig |
146 | | - { |
147 | | - public static void Configure() |
148 | | - { |
149 | | - ReactSiteConfiguration.Configuration = new ReactSiteConfiguration() |
150 | | - .AddScript("~/Scripts/HelloWorld.react.jsx"); |
151 | | - } |
152 | | - } |
153 | | -} |
154 | | -``` |
155 | | - |
156 | | -Call `Html.React` to render a component server-side, passing it the name of the |
157 | | -component, and any required props. |
158 | | - |
159 | | -```csharp |
160 | | -@Html.React("HelloWorld", new |
161 | | -{ |
162 | | - name = "Daniel" |
163 | | -}) |
164 | | -``` |
165 | | - |
166 | | -Call `Html.ReactInitJavaScript` to render initialisation scripts. Note that this |
167 | | -does **not** load the JavaScript for your component, it only renders the |
168 | | -initialisation code. |
169 | | - |
170 | | -```html |
171 | | -<!-- Load all your scripts normally before calling ReactInitJavaScript --> |
172 | | -<!-- Assumes minification/combination is configured as per previous section --> |
173 | | -<script src="http://fb.me/react-0.10.0.min.js"></script> |
174 | | -@Scripts.Render("~/bundles/main") |
175 | | -@Html.ReactInitJavaScript() |
176 | | -``` |
177 | | - |
178 | | -Hit the page and admire the server-rendered beauty: |
179 | | - |
180 | | -```html |
181 | | -<div id="react1"> |
182 | | - <div data-reactid=".2aubxk2hwsu" data-react-checksum="-1025167618"> |
183 | | - <span data-reactid=".2aubxk2hwsu.0">Hello </span> |
184 | | - <span data-reactid=".2aubxk2hwsu.1">Daniel</span> |
185 | | - </div> |
186 | | -</div> |
187 | | - |
188 | | -<script src="http://fb.me/react-0.10.0.min.js"></script> |
189 | | -<script src="/Scripts/HelloWorld.react.js"></script> |
190 | | -<script>React.renderComponent(HelloWorld({"name":"Daniel"}), document.getElementById("react1"));</script> |
191 | | -``` |
192 | | - |
193 | | -The server-rendered HTML will automatically be reused by React client-side, |
194 | | -meaning your initial render will be super fast. |
195 | | - |
196 | | -For a more in-depth example, take a look at the included sample application (React.Samples.Mvc4). |
197 | | - |
198 | | -Changelog |
199 | | -========= |
200 | | -1.0 - ??? 2014 |
201 | | -------------------- |
202 | | - - Initial release |
| 16 | + * [ASP.NET Bundling and Minification](http://reactjs.net/guides/weboptimizer.html) |
| 17 | + * Cassette |
| 18 | + * [Server-side component rendering](http://reactjs.net/guides/server-side-rendering.html) |
| 19 | + to make your initial render super-fast (experimental!) |
203 | 20 |
|
204 | 21 | Licence |
205 | 22 | ======= |
|
0 commit comments