react-rails 2.6.1 → 2.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -10
- data/README.md +22 -21
- data/lib/assets/javascripts/react_ujs.js +74 -37
- data/lib/assets/react-source/development/react-server.js +1911 -2345
- data/lib/assets/react-source/development/react.js +20900 -21712
- data/lib/assets/react-source/production/react-server.js +4 -4
- data/lib/assets/react-source/production/react.js +8 -8
- data/lib/react/rails/version.rb +1 -1
- data/lib/react/server_rendering/webpacker_manifest_container.rb +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96a680594edd90c4c4b7956ca981b98c39c0be650c2570bcac0640fe4641ba0f
|
4
|
+
data.tar.gz: 0c8153bde6bfaaddb6c86c8450729d9ac2aa336ea976dbc959fe94c0a66907a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aac97afcf29aa71177ddbac2e11f117cb64fb524cd435701c3c6f70fb81775f870becfd1ba04f5167830b72808b8e8afbcf18c802477335c28d78ee5b0ec6d2e
|
7
|
+
data.tar.gz: 8988ff16c6619dc0ee8df11b060b49107e63524641b90ba497199d1cbbff96b696be61b3b8eb2237ab6b121e636352c07f5a7066426ff5c8c80608d85a7c32fb
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,19 @@
|
|
8
8
|
|
9
9
|
#### Bug Fixes
|
10
10
|
|
11
|
+
## 2.6.2
|
12
|
+
|
13
|
+
#### New Features
|
14
|
+
|
15
|
+
- React 16.14
|
16
|
+
- Support for ShakaPacker
|
17
|
+
- Preparation for React 18 #1151
|
18
|
+
|
19
|
+
#### Bug Fixes
|
20
|
+
|
21
|
+
- URI.open instead of open #1099
|
22
|
+
- No longer unmount components on Turbolinks navigation #1135
|
23
|
+
|
11
24
|
## 2.6.1
|
12
25
|
|
13
26
|
#### Breaking Changes
|
@@ -112,6 +125,7 @@
|
|
112
125
|
- Call ReactDOM.render() when react_component :prerender option is falsy, instead of ReactDOM.hydrate() #844, #842
|
113
126
|
|
114
127
|
## 2.4.2
|
128
|
+
|
115
129
|
#### Bug Fixes
|
116
130
|
|
117
131
|
- ReactDOM.hydrate() may not be defined for everyone, it will now use hydrate if it is defined or fallback to render #832
|
@@ -224,7 +238,6 @@
|
|
224
238
|
// = require components
|
225
239
|
```
|
226
240
|
|
227
|
-
|
228
241
|
#### New Features
|
229
242
|
|
230
243
|
- Webpacker support:
|
@@ -471,14 +484,14 @@
|
|
471
484
|
|
472
485
|
- Changed server rendering configuration names #253
|
473
486
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
| `config.react.timeout`
|
477
|
-
| `config.react.max_renderers`
|
478
|
-
| `config.react.react_js`
|
479
|
-
| `config.react.component_filenames` | `config.react.server_renderer_options[:files]`
|
480
|
-
| `config.react.replay_console`
|
481
|
-
| (none)
|
487
|
+
| Old | New |
|
488
|
+
| ---------------------------------- | ------------------------------------------------------- |
|
489
|
+
| `config.react.timeout` | `config.react.server_renderer_timeout` |
|
490
|
+
| `config.react.max_renderers` | `config.react.server_renderer_pool_size` |
|
491
|
+
| `config.react.react_js` | `config.react.server_renderer_options[:files]` |
|
492
|
+
| `config.react.component_filenames` | `config.react.server_renderer_options[:files]` |
|
493
|
+
| `config.react.replay_console` | `config.react.server_renderer_options[:replay_console]` |
|
494
|
+
| (none) | `config.react.server_renderer` |
|
482
495
|
|
483
496
|
- JSX is transformed by Babel, not JSTransform #295
|
484
497
|
|
@@ -504,7 +517,6 @@
|
|
504
517
|
- Add `tilt` dependency #248
|
505
518
|
- Default prerender pool size to 1 #302
|
506
519
|
|
507
|
-
|
508
520
|
## 1.0.0 (April 7, 2015)
|
509
521
|
|
510
522
|
#### New Features
|
data/README.md
CHANGED
@@ -67,62 +67,60 @@ $ rails new my-app
|
|
67
67
|
$ cd my-app
|
68
68
|
```
|
69
69
|
|
70
|
-
##### 2) Add `
|
70
|
+
##### 2) Add `react-rails` to your Gemfile:
|
71
71
|
```ruby
|
72
|
-
gem 'webpacker'
|
73
72
|
gem 'react-rails'
|
74
73
|
```
|
74
|
+
Note: On rails versions < 6.0, You need to add `gem 'webpacker'` to your Gemfile in step 2 above.
|
75
75
|
|
76
76
|
##### 3) Now run the installers:
|
77
77
|
|
78
|
-
###### Rails 6.x:
|
78
|
+
###### Rails 6.x and 5.x:
|
79
79
|
```
|
80
80
|
$ bundle install
|
81
|
-
$ rails webpacker:install
|
82
|
-
$ rails webpacker:install:react
|
81
|
+
$ rails webpacker:install # OR (on rails version < 5.0) rake webpacker:install
|
82
|
+
$ rails webpacker:install:react # OR (on rails version < 5.0) rake webpacker:install:react
|
83
83
|
$ rails generate react:install
|
84
84
|
```
|
85
|
-
Note: For Rails 6, You don't need to add `javascript_pack_tag` as in Step 4. Since its already added by default.
|
86
85
|
|
87
|
-
###### Rails 5.x:
|
88
|
-
```
|
89
|
-
$ bundle install
|
90
|
-
$ rails webpacker:install # OR (on rails version < 5.0) rake webpacker:install
|
91
|
-
$ rails webpacker:install:react # OR (on rails version < 5.0) rake webpacker:install:react
|
92
|
-
$ rails generate react:install
|
93
|
-
```
|
94
86
|
This gives you:
|
95
87
|
|
96
88
|
- `app/javascript/components/` directory for your React components
|
97
89
|
- [`ReactRailsUJS`](#ujs) setup in `app/javascript/packs/application.js`
|
98
90
|
- `app/javascript/packs/server_rendering.js` for [server-side rendering](#server-side-rendering)
|
99
91
|
|
100
|
-
|
92
|
+
Note: On rails versions < 6.0, link the JavaScript pack in Rails view using `javascript_pack_tag` [helper](https://github.com/rails/webpacker#usage):
|
101
93
|
```erb
|
102
94
|
<!-- application.html.erb in Head tag below turbolinks -->
|
103
95
|
<%= javascript_pack_tag 'application' %>
|
104
96
|
```
|
105
97
|
|
106
|
-
#####
|
98
|
+
##### 4) Generate your first component:
|
107
99
|
```
|
108
100
|
$ rails g react:component HelloWorld greeting:string
|
109
101
|
```
|
110
102
|
|
111
|
-
#####
|
103
|
+
##### 5) You can also generate your component in a subdirectory:
|
112
104
|
```
|
113
105
|
$ rails g react:component my_subdirectory/HelloWorld greeting:string
|
114
106
|
```
|
115
107
|
Note: Your component is added to `app/javascript/components/` by default.
|
116
108
|
|
109
|
+
Note: If your component is in a subdirectory you will append the directory path to your erb component call.
|
117
110
|
|
118
|
-
|
111
|
+
Example:
|
112
|
+
```
|
113
|
+
<%= react_component("my_subdirectory/HelloWorld", { greeting: "Hello from react-rails." }) %>
|
114
|
+
```
|
115
|
+
|
116
|
+
##### 6) [Render it in a Rails view](#view-helper):
|
119
117
|
|
120
118
|
```erb
|
121
119
|
<!-- erb: paste this in view -->
|
122
120
|
<%= react_component("HelloWorld", { greeting: "Hello from react-rails." }) %>
|
123
121
|
```
|
124
122
|
|
125
|
-
#####
|
123
|
+
##### 7) Lets Start the app:
|
126
124
|
```
|
127
125
|
$ rails s
|
128
126
|
```
|
@@ -172,7 +170,10 @@ $ bundle exec rails webpacker:install:typescript
|
|
172
170
|
$ yarn add @types/react @types/react-dom
|
173
171
|
```
|
174
172
|
|
175
|
-
Doing this will allow React-Rails to support the .tsx extension.
|
173
|
+
Doing this will allow React-Rails to support the .tsx extension. Additionally, it is recommended to add `ts` and `tsx` to the `server_renderer_extensions` in your application configuration:
|
174
|
+
```
|
175
|
+
config.react.server_renderer_extensions = ["jsx", "js", "tsx", "ts"]
|
176
|
+
```
|
176
177
|
|
177
178
|
### Test component
|
178
179
|
|
@@ -690,11 +691,11 @@ One caveat is that currently you [cannot Server-Side Render along with HMR](http
|
|
690
691
|
## Related Projects
|
691
692
|
|
692
693
|
- [webpacker-react](https://github.com/renchap/webpacker-react): Integration of React with Rails utilizing Webpack with Hot Module Replacement (HMR).
|
693
|
-
- [The
|
694
|
+
- [The React on Rails Course](https://learnetto.com/users/hrishio/courses/the-free-react-on-rails-5-course) A video course which teaches the basics of React and how to get started using it in Rails with `react-rails`.
|
694
695
|
- [react\_on\_rails](https://github.com/shakacode/react_on_rails): Integration of React with Rails utilizing Webpack, Redux, React-Router.
|
695
696
|
- [react-rails-hot-loader](https://github.com/rmosolgo/react-rails-hot-loader) Simple live-reloader for `react-rails`.
|
696
697
|
- [react-rails-benchmark_renderer](https://github.com/pboling/react-rails-benchmark_renderer) adds performance instrumentation to server rendering.
|
697
|
-
- [Ruby
|
698
|
+
- [Ruby Hyperstack](https://hyperstack.org/): Use Ruby to build reactive user interfaces with React.
|
698
699
|
|
699
700
|
## Contributing
|
700
701
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
(function webpackUniversalModuleDefinition(root, factory) {
|
2
2
|
if(typeof exports === 'object' && typeof module === 'object')
|
3
|
-
module.exports = factory(require("react"), require("react
|
3
|
+
module.exports = factory(require("react-dom"), require("react"), require("react-dom/server"));
|
4
4
|
else if(typeof define === 'function' && define.amd)
|
5
|
-
define(["react", "react
|
5
|
+
define(["react-dom", "react", "react-dom/server"], factory);
|
6
6
|
else if(typeof exports === 'object')
|
7
|
-
exports["ReactRailsUJS"] = factory(require("react"), require("react
|
7
|
+
exports["ReactRailsUJS"] = factory(require("react-dom"), require("react"), require("react-dom/server"));
|
8
8
|
else
|
9
|
-
root["ReactRailsUJS"] = factory(root["
|
10
|
-
})(this, function(
|
9
|
+
root["ReactRailsUJS"] = factory(root["ReactDOM"], root["React"], root["ReactDOMServer"]);
|
10
|
+
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {
|
11
11
|
return /******/ (function(modules) { // webpackBootstrap
|
12
12
|
/******/ // The module cache
|
13
13
|
/******/ var installedModules = {};
|
@@ -73,7 +73,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
73
73
|
/******/ __webpack_require__.p = "";
|
74
74
|
/******/
|
75
75
|
/******/ // Load entry module and return exports
|
76
|
-
/******/ return __webpack_require__(__webpack_require__.s =
|
76
|
+
/******/ return __webpack_require__(__webpack_require__.s = 7);
|
77
77
|
/******/ })
|
78
78
|
/************************************************************************/
|
79
79
|
/******/ ([
|
@@ -106,13 +106,19 @@ module.exports = function(className) {
|
|
106
106
|
|
107
107
|
/***/ }),
|
108
108
|
/* 1 */
|
109
|
+
/***/ (function(module, exports) {
|
110
|
+
|
111
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
|
112
|
+
|
113
|
+
/***/ }),
|
114
|
+
/* 2 */
|
109
115
|
/***/ (function(module, exports, __webpack_require__) {
|
110
116
|
|
111
|
-
var nativeEvents = __webpack_require__(
|
112
|
-
var pjaxEvents = __webpack_require__(
|
113
|
-
var turbolinksEvents = __webpack_require__(
|
114
|
-
var turbolinksClassicDeprecatedEvents = __webpack_require__(
|
115
|
-
var turbolinksClassicEvents = __webpack_require__(
|
117
|
+
var nativeEvents = __webpack_require__(8)
|
118
|
+
var pjaxEvents = __webpack_require__(9)
|
119
|
+
var turbolinksEvents = __webpack_require__(10)
|
120
|
+
var turbolinksClassicDeprecatedEvents = __webpack_require__(12)
|
121
|
+
var turbolinksClassicEvents = __webpack_require__(11)
|
116
122
|
|
117
123
|
// see what things are globally available
|
118
124
|
// and setup event handlers to those things
|
@@ -164,14 +170,14 @@ module.exports = function(ujs) {
|
|
164
170
|
|
165
171
|
|
166
172
|
/***/ }),
|
167
|
-
/*
|
173
|
+
/* 3 */
|
168
174
|
/***/ (function(module, exports, __webpack_require__) {
|
169
175
|
|
170
176
|
// Make a function which:
|
171
177
|
// - First tries to require the name
|
172
178
|
// - Then falls back to global lookup
|
173
179
|
var fromGlobal = __webpack_require__(0)
|
174
|
-
var fromRequireContext = __webpack_require__(
|
180
|
+
var fromRequireContext = __webpack_require__(13)
|
175
181
|
|
176
182
|
module.exports = function(reqctx) {
|
177
183
|
var fromCtx = fromRequireContext(reqctx)
|
@@ -195,16 +201,41 @@ module.exports = function(reqctx) {
|
|
195
201
|
|
196
202
|
|
197
203
|
/***/ }),
|
198
|
-
/*
|
199
|
-
/***/ (function(module,
|
204
|
+
/* 4 */
|
205
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
200
206
|
|
201
|
-
|
207
|
+
"use strict";
|
208
|
+
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
209
|
+
/* harmony export (immutable) */ __webpack_exports__["supportsHydration"] = supportsHydration;
|
210
|
+
/* harmony export (immutable) */ __webpack_exports__["reactHydrate"] = reactHydrate;
|
211
|
+
/* harmony export (immutable) */ __webpack_exports__["createReactRootLike"] = createReactRootLike;
|
212
|
+
const ReactDOM = __webpack_require__(1)
|
202
213
|
|
203
|
-
|
204
|
-
|
205
|
-
|
214
|
+
function supportsHydration() {
|
215
|
+
return typeof ReactDOM.hydrate === "function" || typeof ReactDOM.hydrateRoot === "function"
|
216
|
+
}
|
217
|
+
|
218
|
+
function reactHydrate(node, component) {
|
219
|
+
if (typeof ReactDOM.hydrateRoot === "function") {
|
220
|
+
return ReactDOM.hydrateRoot(node, component)
|
221
|
+
} else {
|
222
|
+
return ReactDOM.hydrate(component, node)
|
223
|
+
}
|
224
|
+
}
|
225
|
+
|
226
|
+
function createReactRootLike(node) {
|
227
|
+
return ReactDOM.createRoot ? ReactDOM.createRoot(node) : legacyReactRootLike(node)
|
228
|
+
}
|
229
|
+
|
230
|
+
function legacyReactRootLike(node) {
|
231
|
+
const root = {
|
232
|
+
render(component) {
|
233
|
+
return ReactDOM.render(component, node)
|
234
|
+
}
|
235
|
+
}
|
236
|
+
return root
|
237
|
+
}
|
206
238
|
|
207
|
-
module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
|
208
239
|
|
209
240
|
/***/ }),
|
210
241
|
/* 5 */
|
@@ -214,15 +245,22 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_5__;
|
|
214
245
|
|
215
246
|
/***/ }),
|
216
247
|
/* 6 */
|
248
|
+
/***/ (function(module, exports) {
|
249
|
+
|
250
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_6__;
|
251
|
+
|
252
|
+
/***/ }),
|
253
|
+
/* 7 */
|
217
254
|
/***/ (function(module, exports, __webpack_require__) {
|
218
255
|
|
219
|
-
var React = __webpack_require__(
|
220
|
-
var ReactDOM = __webpack_require__(
|
221
|
-
var ReactDOMServer = __webpack_require__(
|
256
|
+
var React = __webpack_require__(5)
|
257
|
+
var ReactDOM = __webpack_require__(1)
|
258
|
+
var ReactDOMServer = __webpack_require__(6)
|
222
259
|
|
223
|
-
var detectEvents = __webpack_require__(
|
260
|
+
var detectEvents = __webpack_require__(2)
|
224
261
|
var constructorFromGlobal = __webpack_require__(0)
|
225
|
-
var constructorFromRequireContextWithGlobalFallback = __webpack_require__(
|
262
|
+
var constructorFromRequireContextWithGlobalFallback = __webpack_require__(3)
|
263
|
+
const { supportsHydration, reactHydrate, createReactRootLike } = __webpack_require__(4)
|
226
264
|
|
227
265
|
var ReactRailsUJS = {
|
228
266
|
// This attribute holds the name of component which should be mounted
|
@@ -329,13 +367,14 @@ var ReactRailsUJS = {
|
|
329
367
|
}
|
330
368
|
}
|
331
369
|
|
332
|
-
if (hydrate &&
|
333
|
-
component =
|
370
|
+
if (hydrate && supportsHydration()) {
|
371
|
+
component = reactHydrate(node, component);
|
334
372
|
} else {
|
335
|
-
|
373
|
+
const root = createReactRootLike(node)
|
374
|
+
component = root.render(component);
|
336
375
|
}
|
337
376
|
}
|
338
|
-
}
|
377
|
+
}
|
339
378
|
},
|
340
379
|
|
341
380
|
// Within `searchSelector`, find nodes which have React components
|
@@ -390,7 +429,7 @@ module.exports = ReactRailsUJS
|
|
390
429
|
|
391
430
|
|
392
431
|
/***/ }),
|
393
|
-
/*
|
432
|
+
/* 8 */
|
394
433
|
/***/ (function(module, exports) {
|
395
434
|
|
396
435
|
module.exports = {
|
@@ -413,7 +452,7 @@ module.exports = {
|
|
413
452
|
|
414
453
|
|
415
454
|
/***/ }),
|
416
|
-
/*
|
455
|
+
/* 9 */
|
417
456
|
/***/ (function(module, exports) {
|
418
457
|
|
419
458
|
module.exports = {
|
@@ -433,25 +472,23 @@ module.exports = {
|
|
433
472
|
|
434
473
|
|
435
474
|
/***/ }),
|
436
|
-
/*
|
475
|
+
/* 10 */
|
437
476
|
/***/ (function(module, exports) {
|
438
477
|
|
439
478
|
module.exports = {
|
440
479
|
// Turbolinks 5+ got rid of named events (?!)
|
441
480
|
setup: function(ujs) {
|
442
481
|
ujs.handleEvent('turbolinks:load', ujs.handleMount);
|
443
|
-
ujs.handleEvent('turbolinks:before-render', ujs.handleUnmount);
|
444
482
|
},
|
445
483
|
|
446
484
|
teardown: function(ujs) {
|
447
485
|
ujs.removeEvent('turbolinks:load', ujs.handleMount);
|
448
|
-
ujs.removeEvent('turbolinks:before-render', ujs.handleUnmount);
|
449
486
|
},
|
450
487
|
}
|
451
488
|
|
452
489
|
|
453
490
|
/***/ }),
|
454
|
-
/*
|
491
|
+
/* 11 */
|
455
492
|
/***/ (function(module, exports) {
|
456
493
|
|
457
494
|
module.exports = {
|
@@ -469,7 +506,7 @@ module.exports = {
|
|
469
506
|
|
470
507
|
|
471
508
|
/***/ }),
|
472
|
-
/*
|
509
|
+
/* 12 */
|
473
510
|
/***/ (function(module, exports) {
|
474
511
|
|
475
512
|
module.exports = {
|
@@ -490,7 +527,7 @@ module.exports = {
|
|
490
527
|
|
491
528
|
|
492
529
|
/***/ }),
|
493
|
-
/*
|
530
|
+
/* 13 */
|
494
531
|
/***/ (function(module, exports) {
|
495
532
|
|
496
533
|
// Load React components by requiring them from "components/", for example:
|