react_on_rails 11.2.2 → 12.0.0.pre.beta.3
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 +23 -1
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +3 -1
- data/.prettierignore +10 -1
- data/.prettierrc +3 -0
- data/.rubocop.yml +37 -11
- data/.travis.yml +9 -20
- data/CHANGELOG.md +73 -6
- data/CONTRIBUTING.md +60 -71
- data/Gemfile +3 -4
- data/{COMM-LICENSE → REACT-ON-RAILS-PRO-LICENSE} +6 -9
- data/README.md +137 -95
- data/Rakefile +0 -7
- data/SUMMARY.md +9 -12
- data/book.json +5 -5
- data/docs/additional-reading/asset-pipeline.md +8 -16
- 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/api/javascript-api.md +3 -3
- data/docs/api/redux-store-api.md +4 -2
- data/docs/api/view-helpers-api.md +7 -8
- data/docs/basics/configuration.md +83 -69
- data/docs/basics/deployment.md +2 -4
- data/docs/basics/heroku-deployment.md +24 -0
- data/docs/basics/hmr-and-hot-reloading-with-the-webpack-dev-server.md +49 -0
- data/docs/basics/i18n.md +45 -23
- data/docs/basics/installation-into-an-existing-rails-app.md +4 -9
- data/docs/basics/minitest-configuration.md +31 -0
- data/docs/basics/react-server-rendering.md +1 -1
- data/docs/basics/recommended-project-structure.md +5 -22
- data/docs/basics/{generator-functions-and-railscontext.md → render-functions-and-railscontext.md} +59 -21
- data/docs/basics/rspec-configuration.md +29 -18
- data/docs/basics/upgrading-react-on-rails.md +69 -3
- data/docs/basics/webpack-configuration.md +18 -8
- 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 +12 -8
- data/docs/{basics → outdated}/how-react-on-rails-works.md +8 -4
- 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 +2 -12
- data/docs/{misc → outdated}/rails3.md +0 -0
- data/docs/testimonials/testimonials.md +3 -3
- data/docs/tutorial.md +96 -70
- 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 +1 -1
- data/lib/generators/react_on_rails/generator_helper.rb +4 -6
- 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 +26 -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/base/base/config/initializers/react_on_rails.rb +4 -1
- 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 +3 -1
- data/lib/react_on_rails/configuration.rb +58 -28
- data/lib/react_on_rails/error.rb +2 -0
- data/lib/react_on_rails/helper.rb +48 -92
- data/lib/react_on_rails/json_parse_error.rb +2 -0
- data/lib/react_on_rails/locales/base.rb +150 -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_pool/ruby_embedded_java_script.rb +41 -46
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +7 -8
- data/lib/react_on_rails/test_helper/webpack_assets_compiler.rb +17 -0
- data/lib/react_on_rails/utils.rb +14 -19
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/version_checker.rb +1 -0
- data/lib/react_on_rails/webpacker_utils.rb +19 -2
- data/lib/tasks/assets.rake +29 -47
- data/lib/tasks/locale.rake +4 -2
- data/package-scripts.yml +11 -8
- data/package.json +29 -28
- 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 +0 -6
- data/rakelib/run_rspec.rake +5 -18
- data/react_on_rails.gemspec +4 -5
- data/tsconfig.json +14 -0
- data/webpackConfigLoader.js +3 -2
- data/yarn.lock +4333 -2209
- metadata +47 -57
- data/Gemfile.rails32 +0 -73
- data/docs/additional-reading/babel.md +0 -5
- data/docs/additional-reading/heroku-deployment.md +0 -92
- 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 -153
- data/lib/react_on_rails/locales_to_js.rb +0 -138
File without changes
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# Testimonials
|
2
|
-
# [HVMN Testimonial, Written by Paul Benigeri, October 12, 2018](./
|
2
|
+
# [HVMN Testimonial, Written by Paul Benigeri, October 12, 2018](./hvmn.md)
|
3
3
|
|
4
4
|
> The price we paid for the consultation + the React on Rails pro license has already been made back a couple of times from hosting fees alone. The entire process was super hands off, and our core team was able to focus on shipping new feature during that sprint.
|
5
5
|
|
6
|
-
Full writeup [here](./
|
6
|
+
Full writeup [here](./hvmn.md).
|
7
7
|
|
8
8
|
---
|
9
9
|
|
10
|
-
# [Leora from ResortPass](./
|
10
|
+
# [Leora from ResortPass](./resortpass.md), December 10, 2018
|
11
11
|
|
12
12
|
Justin and his team were instrumental in assisting us in setting design foundations and standards for our transition to a react on rails application. Just three months of work with the team at Shaka code and we have a main page of our application server-side rendering at exponentially improved speeds.
|
13
13
|
|
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,98 +45,87 @@ 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
|
54
57
|
|
55
58
|
```
|
56
|
-
bundle
|
57
|
-
bundle
|
59
|
+
bundle add webpacker
|
60
|
+
bundle add react_on_rails
|
58
61
|
```
|
59
62
|
|
60
|
-
|
63
|
+
## Run the webpacker generator
|
61
64
|
|
62
65
|
```
|
63
|
-
|
66
|
+
bundle exec rails webpacker:install
|
67
|
+
bundle exec rails webpacker:install:react
|
64
68
|
```
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
Run `bundle` and commit the git repository (or `rails generate` will not work properly)
|
69
|
-
|
70
|
+
Let's commit everything before installing React on Rails.
|
70
71
|
|
71
72
|
```
|
72
|
-
bundle
|
73
|
-
|
74
73
|
# Here are git commands to make a new git repo and commit everything.
|
75
74
|
# Newer versions of Rails create the git repo by default.
|
76
75
|
git add -A
|
77
76
|
git commit -m "Initial commit"
|
78
77
|
```
|
79
78
|
|
80
|
-
|
79
|
+
## Add the **React On Rails** gem to your `Gemfile`:
|
80
|
+
|
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.
|
81
83
|
|
82
84
|
```
|
83
|
-
|
84
|
-
bundle && yarn
|
85
|
+
gem 'react_on_rails', '12.0.0' # prefer exact gem version to match npm version
|
85
86
|
```
|
86
87
|
|
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.
|
88
90
|
|
89
|
-
|
90
|
-
foreman start -f Procfile.dev
|
91
|
-
```
|
91
|
+
Run `bundle` and commit the changes.
|
92
92
|
|
93
|
-
To run with the webpack-dev-server:
|
94
|
-
```
|
95
|
-
foreman start -f Procfile.dev-server
|
96
93
|
```
|
94
|
+
bundle
|
97
95
|
|
98
|
-
|
99
|
-
|
96
|
+
git commit -am "Added React on Rails Gem"
|
97
|
+
```
|
100
98
|
|
101
|
-
|
102
|
-
Until `rails/webpacker` v4 ships, or if you ever want to try out the master branch, you can modify the React on Rails tutorial instructions slightly. You can see the sequence of commits here. To summarize:
|
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.
|
103
100
|
|
104
|
-
|
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`
|
105
103
|
|
106
|
-
```ruby
|
107
|
-
gem 'webpacker', github: "rails/webpacker"
|
108
|
-
gem 'react_on_rails', '11.2.1' # always use exact version
|
109
104
|
```
|
110
|
-
|
111
|
-
Then run these commands:
|
112
|
-
|
113
|
-
```sh
|
114
|
-
bundle exec rails webpacker:install
|
115
|
-
yarn add "rails/webpacker" # because the installer has a bug that puts in an invalid version in your package.json.
|
116
|
-
bundle exec rails webpacker:install:react
|
117
|
-
yarn add --dev webpack-dev-server
|
118
|
-
run rails generate react_on_rails:install && bundle && yarn
|
105
|
+
rails generate react_on_rails:install
|
119
106
|
```
|
120
107
|
|
121
|
-
|
108
|
+
Then run server with a static client bundle. Static means that the bundle is saved in your
|
109
|
+
public/webpack/packs directory.
|
122
110
|
|
123
|
-
|
111
|
+
```
|
112
|
+
foreman start -f Procfile.dev
|
113
|
+
```
|
124
114
|
|
125
|
-
|
126
|
-
|
115
|
+
## To run with the webpack-dev-server:
|
116
|
+
```
|
117
|
+
foreman start -f Procfile.dev-hmr
|
127
118
|
```
|
128
119
|
|
129
|
-
|
120
|
+
Visit [http://localhost:3000/hello_world](http://localhost:3000/hello_world) and see your **React On Rails** app running!
|
130
121
|
|
122
|
+
# HMR vs. React Hot Reloading
|
131
123
|
|
132
|
-
|
124
|
+
First, check that the `hmr` and the `inline` options are `true` in your `config/webpacker.yml` file.
|
133
125
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
* `node_modules`
|
126
|
+
The basic setup will have HMR working with the default webpacker setup. The basic
|
127
|
+
[HMR](https://webpack.js.org/concepts/hot-module-replacement/), without a special
|
128
|
+
React setup, will cause a full page refresh each time you save a file.
|
138
129
|
|
139
130
|
## Deploying to Heroku
|
140
131
|
|
@@ -157,17 +148,16 @@ Set heroku to use multiple buildpacks:
|
|
157
148
|
|
158
149
|
### Swap out sqlite for postgres by doing the following:
|
159
150
|
|
160
|
-
|
151
|
+
Run these two commands:
|
161
152
|
|
162
|
-
```ruby
|
163
|
-
gem 'pg'
|
164
153
|
```
|
165
|
-
|
166
|
-
|
154
|
+
bundle remove sqlite3
|
155
|
+
bundle add pg
|
156
|
+
```
|
167
157
|
|
168
158
|
![07](https://cloud.githubusercontent.com/assets/20628911/17465015/1f2f4042-5cf4-11e6-8287-2fb077550809.png)
|
169
159
|
|
170
|
-
|
160
|
+
### Replace your `database.yml` file with this (assuming your app name is "ror").
|
171
161
|
|
172
162
|
```yml
|
173
163
|
default: &default
|
@@ -195,7 +185,6 @@ production:
|
|
195
185
|
Then you need to setup postgres so you can run locally:
|
196
186
|
|
197
187
|
```
|
198
|
-
bundle
|
199
188
|
rake db:setup
|
200
189
|
rake db:migrate
|
201
190
|
```
|
@@ -219,7 +208,7 @@ Create `/Procfile`. This is what Heroku uses to start your app.
|
|
219
208
|
web: bundle exec puma -C config/puma.rb
|
220
209
|
```
|
221
210
|
|
222
|
-
Note, newer versions of Rails create this file automatically. However, the [docs on Heroku](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#config) have something a bit different, so please make it conform to those docs. As of
|
211
|
+
Note, newer versions of Rails create this file automatically. However, the [docs on Heroku](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#config) have something a bit different, so please make it conform to those docs. As of 2020-06-04, the docs looked like this:
|
223
212
|
|
224
213
|
`config/puma.rb`
|
225
214
|
```rb
|
@@ -240,10 +229,19 @@ on_worker_boot do
|
|
240
229
|
end
|
241
230
|
```
|
242
231
|
|
232
|
+
Next, update your `package.json` to specify the version of yarn and node. Add this section:
|
233
|
+
|
234
|
+
```json
|
235
|
+
"engines": {
|
236
|
+
"node": "13.9.0",
|
237
|
+
"yarn": "1.22.4"
|
238
|
+
},
|
239
|
+
```
|
240
|
+
|
243
241
|
Then after all changes are done don't forget to commit them with git and finally you can push your app to Heroku!
|
244
242
|
|
245
243
|
```
|
246
|
-
git add -
|
244
|
+
git add -A
|
247
245
|
git commit -m "Changes for Heroku"
|
248
246
|
git push heroku master
|
249
247
|
```
|
@@ -256,7 +254,6 @@ heroku open
|
|
256
254
|
|
257
255
|
and you will see your live app and you can share this URL with your friends. Congrats!
|
258
256
|
|
259
|
-
|
260
257
|
## Turning on Server Rendering
|
261
258
|
|
262
259
|
You can turn on server rendering by simply changing the `prerender` option to `true`:
|
@@ -265,10 +262,20 @@ You can turn on server rendering by simply changing the `prerender` option to `t
|
|
265
262
|
<%= react_component("HelloWorld", props: @hello_world_props, prerender: true) %>
|
266
263
|
```
|
267
264
|
|
265
|
+
If you want to test this out with HMR, then you also need to add this line to your
|
266
|
+
`config/intializers/react_on_rails.rb`
|
267
|
+
|
268
|
+
```ruby
|
269
|
+
config.same_bundle_for_client_and_server = true
|
270
|
+
```
|
271
|
+
|
272
|
+
More likely, you will create a different build file for server rendering. However, if you want to
|
273
|
+
use the same file from the webpack-dev-server, you'll need to add that line.
|
274
|
+
|
268
275
|
Then push to Heroku:
|
269
276
|
|
270
277
|
```
|
271
|
-
git add -
|
278
|
+
git add -A
|
272
279
|
git commit -m "Enable server rendering"
|
273
280
|
git push heroku master
|
274
281
|
```
|
@@ -309,7 +316,7 @@ mv app/javascript client
|
|
309
316
|
|
310
317
|
## Using HMR with the rails/webpacker setup
|
311
318
|
|
312
|
-
Start the app using `foreman start -f Procfile.dev-
|
319
|
+
Start the app using `foreman start -f Procfile.dev-hmr`.
|
313
320
|
|
314
321
|
When you change a JSX file and save, the browser will automatically refresh!
|
315
322
|
|
@@ -318,11 +325,30 @@ So you get some basics from HMR with no code changes. If you want to go further,
|
|
318
325
|
* https://github.com/rails/webpacker/blob/master/docs/webpack-dev-server.md
|
319
326
|
* https://webpack.js.org/configuration/dev-server/
|
320
327
|
* https://webpack.js.org/concepts/hot-module-replacement/
|
321
|
-
* https://gaearon.github.io/react-hot-loader/getstarted/
|
322
|
-
* https://github.com/gaearon/react-hot-loader
|
323
328
|
|
324
329
|
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.
|
325
330
|
|
331
|
+
|
332
|
+
### Custom IP & PORT setup (Cloud9 example)
|
333
|
+
|
334
|
+
In case you are running some custom setup with different IP or PORT you should also edit Procfile.dev. For example to be able to run on free Cloud9 IDE we are putting IP 0.0.0.0 and PORT 8080. The default generated file `Procfile.dev` uses `-p 3000`.
|
335
|
+
|
336
|
+
``` Procfile.dev
|
337
|
+
web: rails s -p 8080 -b 0.0.0.0
|
338
|
+
```
|
339
|
+
|
340
|
+
Then visit https://your-shared-addr.c9users.io:8080/hello_world
|
341
|
+
|
342
|
+
## RubyMine
|
343
|
+
|
344
|
+
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.
|
345
|
+
|
346
|
+
* Generated files, per the settings in your `config/webpacker.yml`, which default to `public/packs` and `public/packs-test`
|
347
|
+
* `node_modules`
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
|
326
352
|
## Conclusion
|
327
353
|
|
328
354
|
* Browse the docs either on the [gitbook](https://shakacode.gitbooks.io/react-on-rails/content/) or in the [docs directory on github](https://github.com/shakacode/react_on_rails/tree/master/docs)
|
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").
|
@@ -50,7 +50,7 @@ module ReactOnRails
|
|
50
50
|
contents = File.read(package_json)
|
51
51
|
replacement_value = <<-STRING
|
52
52
|
"scripts": {
|
53
|
-
"postinstall": "
|
53
|
+
"postinstall": "yalc link react-on-rails",
|
54
54
|
STRING
|
55
55
|
new_client_package_json_contents = contents.gsub(/ {2}"scripts": {/,
|
56
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 = {})
|
@@ -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,26 @@
|
|
1
|
+
# Procfile for development using HMR
|
2
|
+
|
3
|
+
web: rails s -p 3000
|
4
|
+
|
5
|
+
# Note, hot and live reloading don't work with the default generator setup on
|
6
|
+
# top of the rails/webpacker Webpack config with server rendering.
|
7
|
+
# If you have server rendering enabled (prerender is true), you either need to
|
8
|
+
# a. Ensure that you have dev_server.hmr and dev_server.inline BOTH set to false,
|
9
|
+
# and you have this option in your config/initializers/react_on_rails.rb:
|
10
|
+
# config.same_bundle_for_client_and_server = true
|
11
|
+
# If you have either config/webpacker.yml option set to true, you'll see errors like
|
12
|
+
# "ReferenceError: window is not defined" (if hmr is true)
|
13
|
+
# "TypeError: Cannot read property 'prototype' of undefined" (if inline is true)
|
14
|
+
# b. Skip using the webpack-dev-server. bin/webpack --watch is typically
|
15
|
+
fast enough.
|
16
|
+
# c. See the React on Rails README for a link to documentation for how to setup
|
17
|
+
# SSR with HMR and React hot loading using the webpack-dev-server only for the
|
18
|
+
# client bundles and a static file for the server bundle.
|
19
|
+
|
20
|
+
# Run the webpack-dev-server for client and maybe server files
|
21
|
+
webpack-dev-server: bin/webpack-dev-server
|
22
|
+
|
23
|
+
# Keep the JS fresh for server rendering. Remove if not server rendering.
|
24
|
+
# Especially if you have not configured generation of a server bundle without a hash.
|
25
|
+
# as that will conflict with the manifest created by the bin/webpack-dev-server
|
26
|
+
# 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;
|