react_on_rails 11.1.8 → 12.0.0.pre.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +320 -0
- data/.eslintignore +2 -1
- data/.eslintrc +30 -2
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +3 -1
- data/.prettierignore +10 -0
- data/.prettierrc +23 -0
- data/.release-it.json +3 -0
- data/.rubocop.yml +37 -11
- data/.travis.yml +10 -20
- data/CHANGELOG.md +89 -3
- data/CONTRIBUTING.md +61 -80
- data/Gemfile +3 -5
- data/{COMM-LICENSE → REACT-ON-RAILS-PRO-LICENSE} +6 -9
- data/README.md +121 -71
- data/Rakefile +0 -7
- data/SUMMARY.md +10 -12
- data/book.json +5 -5
- data/docs/additional-reading/asset-pipeline.md +8 -16
- data/docs/additional-reading/images.md +1 -1
- data/docs/additional-reading/rails_view_rendering_from_inline_javascript.md +2 -1
- data/docs/additional-reading/react-helmet.md +30 -10
- data/docs/additional-reading/react-router.md +52 -75
- data/docs/additional-reading/server-rendering-tips.md +12 -7
- data/docs/additional-reading/upgrade-webpacker-v3-to-v4.md +10 -0
- data/docs/api/javascript-api.md +3 -3
- data/docs/api/redux-store-api.md +4 -2
- data/docs/api/view-helpers-api.md +17 -14
- data/docs/basics/configuration.md +64 -61
- data/docs/basics/deployment.md +1 -2
- data/docs/basics/i18n.md +44 -22
- data/docs/basics/installation-into-an-existing-rails-app.md +2 -2
- data/docs/basics/minitest-configuration.md +31 -0
- data/docs/basics/react-server-rendering.md +1 -1
- data/docs/basics/recommended-project-structure.md +1 -1
- data/docs/basics/{generator-functions-and-railscontext.md → render-functions-and-railscontext.md} +59 -21
- data/docs/basics/rspec-configuration.md +2 -2
- data/docs/basics/upgrading-react-on-rails.md +61 -3
- data/docs/basics/webpack-configuration.md +15 -1
- data/docs/contributor-info/errors-with-hooks.md +45 -0
- data/docs/contributor-info/pull-requests.md +44 -0
- data/docs/misc/doctrine.md +1 -1
- data/docs/{misc-pending → outdated}/code-splitting.md +13 -9
- data/docs/{additional-reading → outdated}/heroku-deployment.md +0 -6
- data/docs/{basics → outdated}/how-react-on-rails-works.md +3 -3
- data/docs/{misc-pending → outdated}/manual-installation-overview.md +5 -5
- data/docs/{additional-reading → outdated}/rails-assets-relative-paths.md +3 -3
- data/docs/{misc-pending → outdated}/rails-assets.md +4 -7
- data/docs/{misc → outdated}/rails3.md +0 -0
- data/docs/testimonials/hvmn.md +3 -3
- data/docs/testimonials/resortpass.md +13 -0
- data/docs/testimonials/testimonials.md +11 -1
- data/docs/tutorial.md +69 -28
- data/jest.config.js +4 -0
- data/lib/generators/react_on_rails/base_generator.rb +2 -2
- data/lib/generators/react_on_rails/dev_tests_generator.rb +2 -1
- data/lib/generators/react_on_rails/generator_helper.rb +4 -6
- data/lib/generators/react_on_rails/install_generator.rb +2 -0
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +3 -1
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-hmr +18 -0
- data/lib/generators/react_on_rails/templates/base/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +20 -40
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx +4 -8
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/store/helloWorldStore.js +1 -3
- data/lib/react_on_rails.rb +4 -1
- data/lib/react_on_rails/configuration.rb +15 -23
- data/lib/react_on_rails/error.rb +2 -0
- data/lib/react_on_rails/git_utils.rb +2 -0
- data/lib/react_on_rails/helper.rb +111 -162
- data/lib/react_on_rails/json_output.rb +1 -1
- data/lib/react_on_rails/json_parse_error.rb +2 -0
- data/lib/react_on_rails/locales/base.rb +142 -0
- data/lib/react_on_rails/locales/to_js.rb +37 -0
- data/lib/react_on_rails/locales/to_json.rb +27 -0
- data/lib/react_on_rails/prerender_error.rb +11 -15
- data/lib/react_on_rails/react_component/render_options.rb +4 -0
- data/lib/react_on_rails/server_rendering_js_code.rb +42 -0
- data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +71 -51
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +7 -8
- data/lib/react_on_rails/utils.rb +15 -20
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/version_checker.rb +5 -1
- data/lib/react_on_rails/webpacker_utils.rb +16 -2
- data/lib/tasks/assets.rake +5 -45
- data/lib/tasks/locale.rake +8 -2
- data/package-scripts.yml +49 -0
- data/package.json +41 -31
- data/rakelib/dummy_apps.rake +1 -9
- data/rakelib/example_type.rb +3 -1
- data/rakelib/examples.rake +3 -0
- data/rakelib/lint.rake +2 -7
- data/rakelib/node_package.rake +2 -2
- data/rakelib/release.rake +3 -8
- data/rakelib/run_rspec.rake +5 -18
- data/react_on_rails.gemspec +3 -5
- data/tsconfig.json +14 -0
- data/webpackConfigLoader.js +5 -4
- data/yarn.lock +7042 -2327
- metadata +39 -57
- data/Gemfile.rails32 +0 -74
- data/docs/additional-reading/babel.md +0 -5
- data/docs/additional-reading/hot-reloading-rails-development-asset-pipeline.md +0 -47
- data/docs/api/ruby-api-hot-reload-view-helpers.md +0 -44
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-server +0 -12
- data/lib/react_on_rails/assets_precompile.rb +0 -150
- data/lib/react_on_rails/locales_to_js.rb +0 -136
data/docs/tutorial.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# React on Rails Basic Tutorial
|
2
2
|
|
3
|
-
|
3
|
+
*Updated for Ruby 2.7.1, Rails 6.0.3.1, and React on Rails v12.0.0*
|
4
|
+
|
5
|
+
This tutorial guides you through setting up a new or existing Rails app with **React on Rails**, demonstrating Rails + React + Redux + Server Rendering.
|
4
6
|
|
5
7
|
After finishing this tutorial you will get an application that can do the following (live on Heroku):
|
6
8
|
|
@@ -17,9 +19,9 @@ By the time you read this, the latest may have changed. Be sure to check the ver
|
|
17
19
|
|
18
20
|
_Note: some of the screen images below show the "npm" command. react_on_rails 6.6.0 and greater uses `yarn`._
|
19
21
|
|
20
|
-
## Setting up
|
22
|
+
## Setting up your environment
|
21
23
|
|
22
|
-
Trying out **React on Rails** is super easy, so long as you have the basic prerequisites. This includes the basics for Rails
|
24
|
+
Trying out **React on Rails** is super easy, so long as you have the basic prerequisites. This includes the basics for Rails 6.x and node version 13+. I recommend `rvm` and `nvm` to install Ruby and Node, and [brew](https://brew.sh/) to install [yarn](https://yarnpkg.com/en/docs/install#mac-tab). Rails can be installed as an ordinary gem.
|
23
25
|
|
24
26
|
```
|
25
27
|
nvm install node # download and install latest stable Node
|
@@ -27,15 +29,15 @@ nvm alias default node # make it default version
|
|
27
29
|
nvm list # check
|
28
30
|
|
29
31
|
brew install yarn # you can use other installer if desired
|
30
|
-
|
31
|
-
rvm
|
32
|
-
rvm use 2.5.0 --default # use it and make it default
|
32
|
+
rvm install 2.7 # download and install latest stable Ruby (update to exact version)
|
33
|
+
rvm use 2.7 --default # use it and make it default
|
33
34
|
rvm list # check
|
34
35
|
|
35
36
|
gem install rails # download and install latest stable Rails
|
36
37
|
gem install foreman # download and install Foreman
|
37
38
|
```
|
38
39
|
|
40
|
+
## Create a new Ruby on Rails App
|
39
41
|
Then we need to create a fresh Rails application with webpacker react support as following.
|
40
42
|
|
41
43
|
First be sure to run `rails -v` and check you are using Rails 5.1.3 or above. If you are using an older version of Rails, you'll need to install webpacker with react per the instructions [here](https://github.com/rails/webpacker).
|
@@ -43,55 +45,88 @@ First be sure to run `rails -v` and check you are using Rails 5.1.3 or above. If
|
|
43
45
|
```
|
44
46
|
cd <directory where you want to create your new Rails app>
|
45
47
|
|
46
|
-
#
|
47
|
-
|
48
|
+
# Any name you like for the rails app
|
49
|
+
# Skip javascript so will add that next and get the current version
|
50
|
+
rails new --skip-sprockets -J --skip-turbolinks test-react-on-rails-v12-no-sprockets
|
48
51
|
|
49
52
|
cd test-react-on-rails
|
50
53
|
bundle
|
51
54
|
```
|
52
55
|
|
53
|
-
|
56
|
+
## Add the webpacker gem
|
57
|
+
|
58
|
+
```
|
59
|
+
bundle add webpacker
|
60
|
+
bundle add react_on_rails
|
61
|
+
```
|
62
|
+
|
63
|
+
## Run the webpacker generator
|
54
64
|
|
55
65
|
```
|
56
66
|
bundle exec rails webpacker:install
|
57
67
|
bundle exec rails webpacker:install:react
|
58
68
|
```
|
59
69
|
|
60
|
-
|
70
|
+
Let's commit everything before installing React on Rails.
|
61
71
|
|
62
72
|
```
|
63
|
-
|
73
|
+
# Here are git commands to make a new git repo and commit everything.
|
74
|
+
# Newer versions of Rails create the git repo by default.
|
75
|
+
git add -A
|
76
|
+
git commit -m "Initial commit"
|
64
77
|
```
|
65
78
|
|
66
|
-
|
79
|
+
## Add the **React On Rails** gem to your `Gemfile`:
|
67
80
|
|
68
|
-
|
81
|
+
To avoid issues regarding inconsistent gem and npm versions, you should specify the exact versions
|
82
|
+
of both the gem and npm package. In other words, don't use the `^` or `~` in the version specifications.
|
69
83
|
|
84
|
+
```
|
85
|
+
gem 'react_on_rails', '12.0.0' # prefer exact gem version to match npm version
|
86
|
+
```
|
87
|
+
|
88
|
+
Note: The latest released React On Rails version is considered stable. Please use the latest
|
89
|
+
version to ensure you get all the security patches and the best support.
|
90
|
+
|
91
|
+
Run `bundle` and commit the changes.
|
70
92
|
|
71
93
|
```
|
72
94
|
bundle
|
73
95
|
|
74
|
-
|
75
|
-
# Newer versions of Rails create the git repo by default.
|
76
|
-
git add -A
|
77
|
-
git commit -m "Initial commit"
|
96
|
+
git commit -am "Added React on Rails Gem"
|
78
97
|
```
|
79
98
|
|
80
|
-
Install React on Rails: `rails generate react_on_rails:install
|
99
|
+
Install React on Rails: `rails generate react_on_rails:install`. You need to first git commit your files before running the generator, or else it will generate an error.
|
100
|
+
|
101
|
+
Note, using `redux` is no longer recommended as the basic installer uses React Hooks.
|
102
|
+
If you want the redux install: `rails generate react_on_rails:install --redux`
|
81
103
|
|
82
104
|
```
|
83
105
|
rails generate react_on_rails:install
|
84
|
-
bundle && yarn
|
85
106
|
```
|
86
107
|
|
87
|
-
|
108
|
+
Then run server with a static client bundle. Static means that the bundle is saved in your
|
109
|
+
public/webpack/packs directory.
|
88
110
|
|
89
111
|
```
|
90
112
|
foreman start -f Procfile.dev
|
91
113
|
```
|
92
114
|
|
115
|
+
## To run with the webpack-dev-server:
|
116
|
+
```
|
117
|
+
foreman start -f Procfile.dev-hmr
|
118
|
+
```
|
119
|
+
|
93
120
|
Visit [http://localhost:3000/hello_world](http://localhost:3000/hello_world) and see your **React On Rails** app running!
|
94
|
-
|
121
|
+
|
122
|
+
*Note, foreman may default to PORT 5000 unless you set the value of PORT in your environment or in the Procfile.*
|
123
|
+
|
124
|
+
# HMR vs. React Hot Reloading
|
125
|
+
|
126
|
+
First, check that the `hmr` option is `true` in your `config/webpacker.yml` file.
|
127
|
+
|
128
|
+
The basic setup will have HMR working with the default webpacker setup. The basic HMR will cause
|
129
|
+
a full page refresh each time you save a file. You also lose any state on your page during the refresh. Don't try to use HMR
|
95
130
|
|
96
131
|
### Custom IP & PORT setup (Cloud9 example)
|
97
132
|
|
@@ -103,7 +138,6 @@ web: rails s -p 8080 -b 0.0.0.0
|
|
103
138
|
|
104
139
|
Then visit https://your-shared-addr.c9users.io:8080/hello_world
|
105
140
|
|
106
|
-
|
107
141
|
## RubyMine
|
108
142
|
|
109
143
|
It's super important to exclude certain directories from RubyMine or else it will slow to a crawl as it tries to parse all the npm files.
|
@@ -218,7 +252,7 @@ end
|
|
218
252
|
Then after all changes are done don't forget to commit them with git and finally you can push your app to Heroku!
|
219
253
|
|
220
254
|
```
|
221
|
-
git add -
|
255
|
+
git add -A
|
222
256
|
git commit -m "Changes for Heroku"
|
223
257
|
git push heroku master
|
224
258
|
```
|
@@ -231,7 +265,6 @@ heroku open
|
|
231
265
|
|
232
266
|
and you will see your live app and you can share this URL with your friends. Congrats!
|
233
267
|
|
234
|
-
|
235
268
|
## Turning on Server Rendering
|
236
269
|
|
237
270
|
You can turn on server rendering by simply changing the `prerender` option to `true`:
|
@@ -240,10 +273,20 @@ You can turn on server rendering by simply changing the `prerender` option to `t
|
|
240
273
|
<%= react_component("HelloWorld", props: @hello_world_props, prerender: true) %>
|
241
274
|
```
|
242
275
|
|
276
|
+
If you want to test this out with HMR, then you also need to add this line to your
|
277
|
+
`config/intializers/react_on_rails.rb`
|
278
|
+
|
279
|
+
```ruby
|
280
|
+
config.same_bundle_for_client_and_server = true
|
281
|
+
```
|
282
|
+
|
283
|
+
More likely, you will create a different build file for server rendering. However, if you want to
|
284
|
+
use the same file from the webpack-dev-server, you'll need to add that line.
|
285
|
+
|
243
286
|
Then push to Heroku:
|
244
287
|
|
245
288
|
```
|
246
|
-
git add -
|
289
|
+
git add -A
|
247
290
|
git commit -m "Enable server rendering"
|
248
291
|
git push heroku master
|
249
292
|
```
|
@@ -284,7 +327,7 @@ mv app/javascript client
|
|
284
327
|
|
285
328
|
## Using HMR with the rails/webpacker setup
|
286
329
|
|
287
|
-
Start the app using `foreman start -f Procfile.dev-
|
330
|
+
Start the app using `foreman start -f Procfile.dev-hmr`.
|
288
331
|
|
289
332
|
When you change a JSX file and save, the browser will automatically refresh!
|
290
333
|
|
@@ -293,8 +336,6 @@ So you get some basics from HMR with no code changes. If you want to go further,
|
|
293
336
|
* https://github.com/rails/webpacker/blob/master/docs/webpack-dev-server.md
|
294
337
|
* https://webpack.js.org/configuration/dev-server/
|
295
338
|
* https://webpack.js.org/concepts/hot-module-replacement/
|
296
|
-
* https://gaearon.github.io/react-hot-loader/getstarted/
|
297
|
-
* https://github.com/gaearon/react-hot-loader
|
298
339
|
|
299
340
|
React on Rails will automatically handle disabling server rendering if there is only one bundle file created by the Webpack development server by rails/webpacker.
|
300
341
|
|
data/jest.config.js
ADDED
@@ -33,7 +33,7 @@ module ReactOnRails
|
|
33
33
|
app/views/layouts/hello_world.html.erb
|
34
34
|
config/initializers/react_on_rails.rb
|
35
35
|
Procfile.dev
|
36
|
-
Procfile.dev-
|
36
|
+
Procfile.dev-hmr]
|
37
37
|
base_files.each { |file| copy_file("#{base_path}#{file}", file) }
|
38
38
|
end
|
39
39
|
|
@@ -107,7 +107,7 @@ module ReactOnRails
|
|
107
107
|
foreman start -f Procfile.dev
|
108
108
|
|
109
109
|
- To turn on HMR, edit config/webpacker.yml and set HMR to true. Restart the rails server
|
110
|
-
and bin/webpack-dev-server. Or use Procfile.dev-
|
110
|
+
and bin/webpack-dev-server. Or use Procfile.dev-hmr.
|
111
111
|
|
112
112
|
- To server render, change this line app/views/hello_world/index.html.erb to
|
113
113
|
`prerender: true` to see server rendering (right click on page and select "view source").
|
@@ -36,6 +36,7 @@ module ReactOnRails
|
|
36
36
|
|
37
37
|
def replace_prerender_if_server_rendering
|
38
38
|
return unless options.example_server_rendering
|
39
|
+
|
39
40
|
hello_world_index = File.join(destination_root, "app", "views", "hello_world", "index.html.erb")
|
40
41
|
hello_world_contents = File.read(hello_world_index)
|
41
42
|
new_hello_world_contents = hello_world_contents.gsub(/prerender: false/,
|
@@ -49,7 +50,7 @@ module ReactOnRails
|
|
49
50
|
contents = File.read(package_json)
|
50
51
|
replacement_value = <<-STRING
|
51
52
|
"scripts": {
|
52
|
-
"postinstall": "
|
53
|
+
"postinstall": "yalc link react-on-rails",
|
53
54
|
STRING
|
54
55
|
new_client_package_json_contents = contents.gsub(/ {2}"scripts": {/,
|
55
56
|
replacement_value)
|
@@ -15,13 +15,11 @@ module GeneratorHelper
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def setup_file_error(file, data)
|
18
|
-
|
19
|
-
|
20
|
-
#{file}
|
21
|
-
|
22
|
-
#{data}
|
18
|
+
<<~MSG
|
19
|
+
#{file} was not found.
|
20
|
+
Please add the following content to your #{file} file:
|
21
|
+
#{data}
|
23
22
|
MSG
|
24
|
-
# rubocop:enable Layout/IndentHeredoc
|
25
23
|
end
|
26
24
|
|
27
25
|
def empty_directory_with_keep_file(destination, config = {})
|
@@ -62,6 +62,7 @@ module ReactOnRails
|
|
62
62
|
|
63
63
|
def missing_yarn?
|
64
64
|
return false unless ReactOnRails::Utils.running_on_windows? ? `where yarn`.blank? : `which yarn`.blank?
|
65
|
+
|
65
66
|
error = "yarn is required. Please install it before continuing. https://yarnpkg.com/en/docs/install"
|
66
67
|
GeneratorMessages.add_error(error)
|
67
68
|
true
|
@@ -69,6 +70,7 @@ module ReactOnRails
|
|
69
70
|
|
70
71
|
def missing_node?
|
71
72
|
return false unless ReactOnRails::Utils.running_on_windows? ? `where node`.blank? : `which node`.blank?
|
73
|
+
|
72
74
|
error = "** nodejs is required. Please install it before continuing. https://nodejs.org/en/"
|
73
75
|
GeneratorMessages.add_error(error)
|
74
76
|
true
|
@@ -4,4 +4,6 @@ web: rails s -p 3000
|
|
4
4
|
# Next line runs a watch process with webpack to compile the changed files.
|
5
5
|
# When making frequent changes to client side assets, you will prefer building webpack assets
|
6
6
|
# upon saving rather than when you refresh your browser page.
|
7
|
-
|
7
|
+
# Note, if using React on Rails localization you will need to run
|
8
|
+
# `bundle exec rake react_on_rails:locale` before you run bin/webpack
|
9
|
+
client: sh -c 'rm -rf public/packs/* || true && bin/webpack -w'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
web: rails s -p 3000
|
2
|
+
|
3
|
+
# Note, hot and live reloading don't work with the default generator setup on
|
4
|
+
# top of the rails/webpacker Webpack config with server rendering.
|
5
|
+
# If you have server rendering enabled (prerender is true), you either need to
|
6
|
+
# a. Skip using the webpack-dev-server. bin/webpack --watch is typically
|
7
|
+
fast enough.
|
8
|
+
# b. See the React on Rails README for a link to documentation for how to setup
|
9
|
+
# SSR with HMR and React hot loading
|
10
|
+
# Otherwise, you will have an error. If you want HMR and Server Rendering, see
|
11
|
+
# the example in the https://github.com/shakacode/react-webpack-rails-tutorial
|
12
|
+
web: rails s -p 3000
|
13
|
+
|
14
|
+
# Run the hot reload server for client development
|
15
|
+
webpack-dev-server: bin/webpack-dev-server
|
16
|
+
|
17
|
+
# Keep the JS fresh for server rendering. Remove if not server rendering
|
18
|
+
rails-server-assets: SERVER_BUNDLE_ONLY=yes bin/webpack --watch
|
@@ -1,45 +1,25 @@
|
|
1
1
|
import PropTypes from 'prop-types';
|
2
|
-
import React from 'react';
|
2
|
+
import React, { useState } from 'react';
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
name: PropTypes.string.isRequired, // this is passed from the Rails view
|
7
|
-
};
|
4
|
+
const HelloWorld = (props) => {
|
5
|
+
const [name, setName] = useState(props.name);
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
return (
|
8
|
+
<div>
|
9
|
+
<h3>Hello, {name}!</h3>
|
10
|
+
<hr />
|
11
|
+
<form>
|
12
|
+
<label htmlFor="name">
|
13
|
+
Say hello to:
|
14
|
+
<input id="name" type="text" value={name} onChange={(e) => setName(e.target.value)} />
|
15
|
+
</label>
|
16
|
+
</form>
|
17
|
+
</div>
|
18
|
+
);
|
19
|
+
};
|
14
20
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
21
|
+
HelloWorld.propTypes = {
|
22
|
+
name: PropTypes.string.isRequired, // this is passed from the Rails view
|
23
|
+
};
|
19
24
|
|
20
|
-
|
21
|
-
this.setState({ name });
|
22
|
-
};
|
23
|
-
|
24
|
-
render() {
|
25
|
-
return (
|
26
|
-
<div>
|
27
|
-
<h3>
|
28
|
-
Hello, {this.state.name}!
|
29
|
-
</h3>
|
30
|
-
<hr />
|
31
|
-
<form >
|
32
|
-
<label htmlFor="name">
|
33
|
-
Say hello to:
|
34
|
-
</label>
|
35
|
-
<input
|
36
|
-
id="name"
|
37
|
-
type="text"
|
38
|
-
value={this.state.name}
|
39
|
-
onChange={(e) => this.updateName(e.target.value)}
|
40
|
-
/>
|
41
|
-
</form>
|
42
|
-
</div>
|
43
|
-
);
|
44
|
-
}
|
45
|
-
}
|
25
|
+
export default HelloWorld;
|
@@ -4,19 +4,15 @@ import React from 'react';
|
|
4
4
|
const HelloWorld = ({ name, updateName }) => (
|
5
5
|
<div>
|
6
6
|
<h3>
|
7
|
-
Hello,
|
7
|
+
Hello,
|
8
|
+
{name}!
|
8
9
|
</h3>
|
9
10
|
<hr />
|
10
|
-
<form
|
11
|
+
<form>
|
11
12
|
<label htmlFor="name">
|
12
13
|
Say hello to:
|
14
|
+
<input id="name" type="text" value={name} onChange={(e) => updateName(e.target.value)} />
|
13
15
|
</label>
|
14
|
-
<input
|
15
|
-
id="name"
|
16
|
-
type="text"
|
17
|
-
value={name}
|
18
|
-
onChange={(e) => updateName(e.target.value)}
|
19
|
-
/>
|
20
16
|
</form>
|
21
17
|
</div>
|
22
18
|
);
|
@@ -1,8 +1,6 @@
|
|
1
1
|
import { createStore } from 'redux';
|
2
2
|
import helloWorldReducer from '../reducers/helloWorldReducer';
|
3
3
|
|
4
|
-
const configureStore = (railsProps) => (
|
5
|
-
createStore(helloWorldReducer, railsProps)
|
6
|
-
);
|
4
|
+
const configureStore = (railsProps) => createStore(helloWorldReducer, railsProps);
|
7
5
|
|
8
6
|
export default configureStore;
|
data/lib/react_on_rails.rb
CHANGED
@@ -11,6 +11,7 @@ require "react_on_rails/version"
|
|
11
11
|
require "react_on_rails/version_checker"
|
12
12
|
require "react_on_rails/configuration"
|
13
13
|
require "react_on_rails/server_rendering_pool"
|
14
|
+
require "react_on_rails/server_rendering_js_code"
|
14
15
|
require "react_on_rails/engine"
|
15
16
|
require "react_on_rails/react_component/render_options"
|
16
17
|
require "react_on_rails/version_syntax_converter"
|
@@ -21,4 +22,6 @@ require "react_on_rails/webpacker_utils"
|
|
21
22
|
require "react_on_rails/test_helper/webpack_assets_compiler"
|
22
23
|
require "react_on_rails/test_helper/webpack_assets_status_checker"
|
23
24
|
require "react_on_rails/test_helper/ensure_assets_compiled"
|
24
|
-
require "react_on_rails/
|
25
|
+
require "react_on_rails/locales/base"
|
26
|
+
require "react_on_rails/locales/to_js"
|
27
|
+
require "react_on_rails/locales/to_json"
|
@@ -21,7 +21,7 @@ module ReactOnRails
|
|
21
21
|
prerender: false,
|
22
22
|
replay_console: true,
|
23
23
|
logging_on_server: true,
|
24
|
-
raise_on_prerender_error:
|
24
|
+
raise_on_prerender_error: Rails.env.development?,
|
25
25
|
trace: Rails.env.development?,
|
26
26
|
development_mode: Rails.env.development?,
|
27
27
|
server_renderer_pool_size: DEFAULT_POOL_SIZE,
|
@@ -31,10 +31,11 @@ module ReactOnRails
|
|
31
31
|
webpack_generated_files: %w[manifest.json],
|
32
32
|
rendering_extension: nil,
|
33
33
|
server_render_method: nil,
|
34
|
-
symlink_non_digested_assets_regex: nil,
|
35
34
|
build_test_command: "",
|
36
35
|
build_production_command: "",
|
37
|
-
random_dom_id: DEFAULT_RANDOM_DOM_ID
|
36
|
+
random_dom_id: DEFAULT_RANDOM_DOM_ID,
|
37
|
+
same_bundle_for_client_and_server: false,
|
38
|
+
i18n_output_format: nil
|
38
39
|
)
|
39
40
|
end
|
40
41
|
|
@@ -46,8 +47,9 @@ module ReactOnRails
|
|
46
47
|
:generated_assets_dirs, :generated_assets_dir,
|
47
48
|
:webpack_generated_files, :rendering_extension, :build_test_command,
|
48
49
|
:build_production_command,
|
49
|
-
:i18n_dir, :i18n_yml_dir,
|
50
|
-
:server_render_method, :
|
50
|
+
:i18n_dir, :i18n_yml_dir, :i18n_output_format,
|
51
|
+
:server_render_method, :random_dom_id,
|
52
|
+
:same_bundle_for_client_and_server
|
51
53
|
|
52
54
|
def initialize(node_modules_location: nil, server_bundle_js_file: nil, prerender: nil,
|
53
55
|
replay_console: nil,
|
@@ -58,16 +60,17 @@ module ReactOnRails
|
|
58
60
|
generated_assets_dir: nil, webpack_generated_files: nil,
|
59
61
|
rendering_extension: nil, build_test_command: nil,
|
60
62
|
build_production_command: nil,
|
61
|
-
|
62
|
-
|
63
|
+
same_bundle_for_client_and_server: nil,
|
64
|
+
i18n_dir: nil, i18n_yml_dir: nil, i18n_output_format: nil,
|
65
|
+
random_dom_id: nil, server_render_method: nil)
|
63
66
|
self.node_modules_location = node_modules_location.present? ? node_modules_location : Rails.root
|
64
|
-
self.server_bundle_js_file = server_bundle_js_file
|
65
67
|
self.generated_assets_dirs = generated_assets_dirs
|
66
68
|
self.generated_assets_dir = generated_assets_dir
|
67
69
|
self.build_test_command = build_test_command
|
68
70
|
self.build_production_command = build_production_command
|
69
71
|
self.i18n_dir = i18n_dir
|
70
72
|
self.i18n_yml_dir = i18n_yml_dir
|
73
|
+
self.i18n_output_format = i18n_output_format
|
71
74
|
|
72
75
|
self.random_dom_id = random_dom_id
|
73
76
|
self.prerender = prerender
|
@@ -83,6 +86,8 @@ module ReactOnRails
|
|
83
86
|
self.skip_display_none = skip_display_none
|
84
87
|
|
85
88
|
# Server rendering:
|
89
|
+
self.server_bundle_js_file = server_bundle_js_file
|
90
|
+
self.same_bundle_for_client_and_server = same_bundle_for_client_and_server
|
86
91
|
self.server_renderer_pool_size = self.development_mode ? 1 : server_renderer_pool_size
|
87
92
|
self.server_renderer_timeout = server_renderer_timeout # seconds
|
88
93
|
|
@@ -90,7 +95,6 @@ module ReactOnRails
|
|
90
95
|
self.rendering_extension = rendering_extension
|
91
96
|
|
92
97
|
self.server_render_method = server_render_method
|
93
|
-
self.symlink_non_digested_assets_regex = symlink_non_digested_assets_regex
|
94
98
|
end
|
95
99
|
|
96
100
|
# on ReactOnRails
|
@@ -99,7 +103,6 @@ module ReactOnRails
|
|
99
103
|
configure_generated_assets_dirs_deprecation
|
100
104
|
configure_skip_display_none_deprecation
|
101
105
|
ensure_generated_assets_dir_present
|
102
|
-
ensure_server_bundle_js_file_has_no_path
|
103
106
|
check_i18n_directory_exists
|
104
107
|
check_i18n_yml_directory_exists
|
105
108
|
check_server_render_method_is_only_execjs
|
@@ -198,26 +201,15 @@ module ReactOnRails
|
|
198
201
|
def ensure_webpack_generated_files_exists
|
199
202
|
return unless webpack_generated_files.empty?
|
200
203
|
|
201
|
-
files = ["
|
204
|
+
files = ["manifest.json"]
|
202
205
|
files << server_bundle_js_file if server_bundle_js_file.present?
|
203
206
|
|
204
207
|
self.webpack_generated_files = files
|
205
208
|
end
|
206
209
|
|
207
|
-
def ensure_server_bundle_js_file_has_no_path
|
208
|
-
return unless server_bundle_js_file.include?(File::SEPARATOR)
|
209
|
-
|
210
|
-
assets_dir = ReactOnRails::Utils.generated_assets_full_path
|
211
|
-
self.server_bundle_js_file = File.basename(server_bundle_js_file)
|
212
|
-
|
213
|
-
Rails.logger.warn do
|
214
|
-
"[DEPRECATION] ReactOnRails: remove path from server_bundle_js_file in configuration. "\
|
215
|
-
"All generated files must go in #{assets_dir}. Using file basename #{server_bundle_js_file}"
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
210
|
def configure_skip_display_none_deprecation
|
220
211
|
return if skip_display_none.nil?
|
212
|
+
|
221
213
|
Rails.logger.warn "[DEPRECATION] ReactOnRails: remove skip_display_none from configuration."
|
222
214
|
end
|
223
215
|
end
|