react_on_rails 5.2.0 → 6.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +31 -0
- data/PROJECTS.md +11 -2
- data/README.md +33 -203
- data/app/helpers/react_on_rails_helper.rb +32 -49
- data/docs/additional-reading/heroku-deployment.md +2 -35
- data/docs/additional-reading/node-server-rendering.md +30 -0
- data/docs/additional-reading/rails-assets.md +19 -0
- data/docs/additional-reading/rspec-configuration.md +38 -4
- data/docs/additional-reading/webpack-dev-server.md +16 -0
- data/docs/additional-reading/webpack.md +0 -10
- data/docs/api/javascript-api.md +37 -0
- data/docs/api/ruby-api-hot-reload-view-helpers.md +42 -0
- data/docs/api/ruby-api.md +3 -0
- data/docs/basics/generator.md +49 -0
- data/docs/{additional-reading → basics}/installation-overview.md +0 -0
- data/docs/basics/migrating-from-react-rails.md +17 -0
- data/docs/contributor-info/contributing.md +11 -0
- data/docs/{coding-style → contributor-info}/linters.md +0 -0
- data/lib/generators/USAGE +3 -95
- data/lib/generators/react_on_rails/base_generator.rb +10 -43
- data/lib/generators/react_on_rails/dev_tests_generator.rb +17 -1
- data/lib/generators/react_on_rails/install_generator.rb +0 -6
- data/lib/generators/react_on_rails/react_no_redux_generator.rb +3 -17
- data/lib/generators/react_on_rails/react_with_redux_generator.rb +4 -21
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev.tt +2 -2
- data/lib/generators/react_on_rails/templates/base/base/app/views/hello_world/index.html.erb.tt +3 -4
- data/lib/generators/react_on_rails/templates/base/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx.tt +1 -11
- data/lib/generators/react_on_rails/templates/base/base/client/node/package.json +10 -0
- data/lib/generators/react_on_rails/templates/base/base/client/node/server.js +82 -0
- data/lib/generators/react_on_rails/templates/base/base/client/package.json.tt +3 -20
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.config.js +58 -0
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt +60 -26
- data/lib/generators/react_on_rails/templates/base/base/lib/tasks/assets.rake.tt +1 -4
- data/lib/generators/react_on_rails/templates/base/base/lib/tasks/load_test.rake +8 -0
- data/lib/generators/react_on_rails/templates/base/base/package.json.tt +0 -12
- data/lib/generators/react_on_rails/templates/dev_tests/spec/features/hello_world_spec.rb +1 -1
- data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +1 -0
- data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/containers/HelloWorld.jsx +1 -7
- data/lib/generators/react_on_rails/templates/{base/base/client/app/bundles/HelloWorld/startup/clientRegistration.jsx.tt → no_redux/base/client/app/bundles/HelloWorld/startup/HelloWorldApp.jsx.tt} +7 -1
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/startup/{HelloWorldAppClient.jsx.tt → HelloWorldApp.jsx.tt} +5 -1
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/store/helloWorldStore.jsx +1 -5
- data/lib/react_on_rails.rb +2 -1
- data/lib/react_on_rails/configuration.rb +17 -5
- data/lib/react_on_rails/react_component/options.rb +76 -0
- data/lib/react_on_rails/server_rendering_pool.rb +9 -151
- data/lib/react_on_rails/server_rendering_pool/exec.rb +166 -0
- data/lib/react_on_rails/server_rendering_pool/node.rb +77 -0
- data/lib/react_on_rails/test_helper.rb +1 -6
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +4 -77
- data/lib/react_on_rails/test_helper/node_process_launcher.rb +12 -0
- data/lib/react_on_rails/test_helper/webpack_assets_compiler.rb +4 -28
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/tasks/assets.rake +115 -0
- data/package.json +2 -1
- data/rakelib/example_type.rb +3 -10
- data/rakelib/examples_config.yml +2 -2
- data/react_on_rails.gemspec +1 -0
- metadata +41 -20
- data/lib/generators/react_on_rails/templates/base/base/REACT_ON_RAILS.md +0 -16
- data/lib/generators/react_on_rails/templates/base/base/client/REACT_ON_RAILS_CLIENT_README.md +0 -3
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.base.config.js +0 -65
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.rails.config.js +0 -53
- data/lib/generators/react_on_rails/templates/base/server_rendering/client/app/bundles/HelloWorld/startup/serverRegistration.jsx +0 -4
- data/lib/generators/react_on_rails/templates/base/server_rendering/client/webpack.server.rails.config.js +0 -39
- data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/startup/HelloWorldAppClient.jsx.tt +0 -6
- data/lib/generators/react_on_rails/templates/no_redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +0 -6
- data/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js +0 -21
- data/lib/generators/react_on_rails/templates/redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +0 -19
- data/lib/react_on_rails/test_helper/webpack_process_checker.rb +0 -54
@@ -0,0 +1,82 @@
|
|
1
|
+
var net = require('net');
|
2
|
+
var fs = require('fs');
|
3
|
+
|
4
|
+
var bundlePath = '../../app/assets/webpack/';
|
5
|
+
var bundleFileName = 'webpack-bundle.js';
|
6
|
+
|
7
|
+
var currentArg;
|
8
|
+
|
9
|
+
function Handler() {
|
10
|
+
this.queue = [];
|
11
|
+
this.initialized = false;
|
12
|
+
}
|
13
|
+
|
14
|
+
Handler.prototype.handle = function (connection) {
|
15
|
+
var callback = function () {
|
16
|
+
connection.setEncoding('utf8');
|
17
|
+
connection.on('data', (data)=> {
|
18
|
+
console.log('Processing request: ' + data);
|
19
|
+
var result = eval(data);
|
20
|
+
connection.write(result);
|
21
|
+
});
|
22
|
+
};
|
23
|
+
|
24
|
+
if (this.initialized) {
|
25
|
+
callback();
|
26
|
+
} else {
|
27
|
+
this.queue.push(callback);
|
28
|
+
}
|
29
|
+
};
|
30
|
+
|
31
|
+
Handler.prototype.initialize = function () {
|
32
|
+
console.log('Processing ' + this.queue.length + ' pending requests');
|
33
|
+
var callback;
|
34
|
+
while (callback = this.queue.pop()) {
|
35
|
+
callback();
|
36
|
+
}
|
37
|
+
|
38
|
+
this.initialized = true;
|
39
|
+
};
|
40
|
+
|
41
|
+
var handler = new Handler();
|
42
|
+
|
43
|
+
process.argv.forEach((val) => {
|
44
|
+
if (val[0] == '-') {
|
45
|
+
currentArg = val.slice(1);
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
|
49
|
+
if (currentArg == 's') {
|
50
|
+
bundleFileName = val;
|
51
|
+
}
|
52
|
+
});
|
53
|
+
|
54
|
+
try {
|
55
|
+
fs.mkdirSync(bundlePath);
|
56
|
+
} catch (e) {
|
57
|
+
if (e.code != 'EEXIST') throw e;
|
58
|
+
}
|
59
|
+
|
60
|
+
fs.watchFile(bundlePath + bundleFileName, (curr) => {
|
61
|
+
if (curr && curr.blocks && curr.blocks > 0) {
|
62
|
+
if (handler.initialized) {
|
63
|
+
console.log('Reloading server bundle must be implemented by restarting the node process!');
|
64
|
+
return;
|
65
|
+
}
|
66
|
+
|
67
|
+
require(bundlePath + bundleFileName);
|
68
|
+
console.log('Loaded server bundle: ' + bundlePath + bundleFileName);
|
69
|
+
handler.initialize();
|
70
|
+
}
|
71
|
+
});
|
72
|
+
|
73
|
+
var unixServer = net.createServer(function (connection) {
|
74
|
+
handler.handle(connection);
|
75
|
+
});
|
76
|
+
|
77
|
+
unixServer.listen('node.sock');
|
78
|
+
|
79
|
+
process.on('SIGINT', () => {
|
80
|
+
unixServer.close();
|
81
|
+
process.exit();
|
82
|
+
});
|
@@ -7,23 +7,11 @@
|
|
7
7
|
"npm": "3.5.0"
|
8
8
|
},
|
9
9
|
"scripts": {
|
10
|
-
"build:
|
11
|
-
|
12
|
-
"build:
|
13
|
-
<%- end -%>
|
14
|
-
"build:dev:client": "webpack -w --config webpack.client.rails.config.js",
|
15
|
-
<%- if options.server_rendering? -%>
|
16
|
-
"build:dev:server": "webpack -w --config webpack.server.rails.config.js",
|
17
|
-
<%- end -%>
|
18
|
-
"build:production:client": "NODE_ENV=production webpack --config webpack.client.rails.build.config.js",
|
19
|
-
<%- if options.server_rendering? -%>
|
20
|
-
"build:production:server": "NODE_ENV=production webpack --config webpack.server.rails.build.config.js",
|
21
|
-
<%- end -%>
|
22
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
10
|
+
"build:test": "webpack --config webpack.config.js",
|
11
|
+
"build:production": "NODE_ENV=production webpack --config webpack.config.js",
|
12
|
+
"build:development": "webpack -w --config webpack.config.js"
|
23
13
|
},
|
24
14
|
"dependencies": {
|
25
|
-
"autoprefixer": "^6.3.5",
|
26
|
-
"axios": "^0.9.1",
|
27
15
|
"babel": "^6.5.2",
|
28
16
|
"babel-cli": "^6.6.5",
|
29
17
|
"babel-core": "^6.7.4",
|
@@ -33,17 +21,12 @@
|
|
33
21
|
"babel-preset-es2015": "^6.6.0",
|
34
22
|
"babel-preset-react": "^6.5.0",
|
35
23
|
"babel-preset-stage-0": "^6.5.0",
|
36
|
-
"css-loader": "^0.23.1",
|
37
24
|
"es5-shim": "^4.5.7",
|
38
25
|
"expose-loader": "^0.7.1",
|
39
26
|
<%- if options.redux? -%>
|
40
27
|
"immutable": "^3.7.6",
|
41
28
|
<%- end -%>
|
42
29
|
"imports-loader": "^0.6.5",
|
43
|
-
"jquery": "^2.2.2",
|
44
|
-
"jquery-ujs": "^1.2.1",
|
45
|
-
"loader-utils": "^0.2.13",
|
46
|
-
"lodash": "^4.7.0",
|
47
30
|
<%- if options.redux? -%>
|
48
31
|
"mirror-creator": "1.1.0",
|
49
32
|
<%- end -%>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
const webpack = require('webpack');
|
2
|
+
const path = require('path');
|
3
|
+
|
4
|
+
const devBuild = process.env.NODE_ENV !== 'production';
|
5
|
+
const nodeEnv = devBuild ? 'development' : 'production';
|
6
|
+
|
7
|
+
config = {
|
8
|
+
entry: [
|
9
|
+
'es5-shim/es5-shim',
|
10
|
+
'es5-shim/es5-sham',
|
11
|
+
'babel-polyfill',
|
12
|
+
'./app/bundles/HelloWorld/startup/HelloWorldApp',
|
13
|
+
],
|
14
|
+
|
15
|
+
output: {
|
16
|
+
filename: 'webpack-bundle.js',
|
17
|
+
path: '../app/assets/webpack',
|
18
|
+
},
|
19
|
+
|
20
|
+
resolve: {
|
21
|
+
extensions: ['', '.js', '.jsx'],
|
22
|
+
alias: {
|
23
|
+
react: path.resolve('./node_modules/react'),
|
24
|
+
'react-dom': path.resolve('./node_modules/react-dom'),
|
25
|
+
},
|
26
|
+
},
|
27
|
+
plugins: [
|
28
|
+
new webpack.DefinePlugin({
|
29
|
+
'process.env': {
|
30
|
+
NODE_ENV: JSON.stringify(nodeEnv),
|
31
|
+
},
|
32
|
+
}),
|
33
|
+
],
|
34
|
+
module: {
|
35
|
+
loaders: [
|
36
|
+
{
|
37
|
+
test: require.resolve('react'),
|
38
|
+
loader: 'imports?shim=es5-shim/es5-shim&sham=es5-shim/es5-sham',
|
39
|
+
},
|
40
|
+
{
|
41
|
+
test: /\.jsx?$/, loader: 'babel-loader',
|
42
|
+
exclude: /node_modules/,
|
43
|
+
},
|
44
|
+
],
|
45
|
+
},
|
46
|
+
};
|
47
|
+
|
48
|
+
module.exports = config;
|
49
|
+
|
50
|
+
if (devBuild) {
|
51
|
+
console.log('Webpack dev build for Rails'); // eslint-disable-line no-console
|
52
|
+
module.exports.devtool = 'eval-source-map';
|
53
|
+
} else {
|
54
|
+
config.plugins.push(
|
55
|
+
new webpack.optimize.DedupePlugin()
|
56
|
+
);
|
57
|
+
console.log('Webpack production build for Rails'); // eslint-disable-line no-console
|
58
|
+
}
|
data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt
CHANGED
@@ -2,42 +2,76 @@
|
|
2
2
|
ReactOnRails.configure do |config|
|
3
3
|
# Client bundles are configured in application.js
|
4
4
|
|
5
|
-
# Directory where your generated assets go
|
5
|
+
# Directory where your generated assets go. All generated assets must go to the same directory.
|
6
|
+
# Configure this in your webpack config files. This relative to your Rails root directory.
|
6
7
|
config.generated_assets_dir = File.join(%w(app assets webpack))
|
7
8
|
|
8
|
-
# Define the files
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
#
|
24
|
-
config.
|
25
|
-
|
26
|
-
|
9
|
+
# Define the files we need to check for webpack compilation when running tests.
|
10
|
+
config.webpack_generated_files = %w( webpack-bundle.js )
|
11
|
+
|
12
|
+
# This is the file used for server rendering of React when using `(prerender: true)`
|
13
|
+
# If you are never using server rendering, you may set this to "".
|
14
|
+
# If you are using the same file for client and server rendering, having this set probably does
|
15
|
+
# not affect performance.
|
16
|
+
config.server_bundle_js_file = "webpack-bundle.js"
|
17
|
+
|
18
|
+
# If you are using the ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
|
19
|
+
# with rspec then this controls what npm command is run
|
20
|
+
# to automatically refresh your webpack assets on every test run.
|
21
|
+
config.npm_build_test_command = "npm run build:test"
|
22
|
+
|
23
|
+
# This configures the script to run to build the production assets by webpack. Set this to nil
|
24
|
+
# if you don't want react_on_rails building this file for you.
|
25
|
+
config.npm_build_production_command = "npm run build:production"
|
26
|
+
|
27
|
+
################################################################################
|
28
|
+
# CLIENT RENDERING OPTIONS
|
29
|
+
# Below options can be overriden by passing options to the react_on_rails
|
30
|
+
# `render_component` view helper method.
|
31
|
+
################################################################################
|
32
|
+
# default is false
|
33
|
+
config.prerender = false
|
34
|
+
|
35
|
+
# default is true for development, off otherwise
|
36
|
+
config.trace = Rails.env.development?
|
37
|
+
|
38
|
+
################################################################################
|
39
|
+
# SERVER RENDERING OPTIONS
|
40
|
+
################################################################################
|
27
41
|
# If set to true, this forces Rails to reload the server bundle if it is modified
|
28
42
|
config.development_mode = Rails.env.development?
|
43
|
+
|
29
44
|
# For server rendering. This can be set to false so that server side messages are discarded.
|
30
45
|
# Default is true. Be cautious about turning this off.
|
31
46
|
config.replay_console = true
|
32
|
-
|
47
|
+
|
48
|
+
# Default is true. Logs server rendering messages to Rails.logger.info
|
33
49
|
config.logging_on_server = true
|
34
50
|
|
35
|
-
#
|
51
|
+
config.raise_on_prerender_error = false # change to true to raise exception on server if the JS code throws
|
52
|
+
|
53
|
+
# Server rendering only (not for render_component helper)
|
54
|
+
# You can configure your pool of JS virtual machines and specify where it should load code:
|
55
|
+
# On MRI, use `therubyracer` for the best performance
|
56
|
+
# (see [discussion](https://github.com/reactjs/react-rails/pull/290))
|
57
|
+
# On MRI, you'll get a deadlock with `pool_size` > 1
|
58
|
+
# If you're using JRuby, you can increase `pool_size` to have real multi-threaded rendering.
|
59
|
+
config.server_renderer_pool_size = 1 # increase if you're on JRuby
|
60
|
+
config.server_renderer_timeout = 20 # seconds
|
61
|
+
|
62
|
+
################################################################################
|
63
|
+
# MISCELLANEOUS OPTIONS
|
64
|
+
################################################################################
|
36
65
|
|
37
|
-
# Default is false
|
38
|
-
config.prerender = false
|
39
|
-
# Default is true for development, off otherwise
|
40
|
-
config.trace = Rails.env.development?
|
41
66
|
# Default is false, enable if your content security policy doesn't include `style-src: 'unsafe-inline'`
|
42
67
|
config.skip_display_none = false
|
68
|
+
|
69
|
+
# The server render method - either ExecJS or NodeJS
|
70
|
+
config.server_render_method = "ExecJS"
|
71
|
+
|
72
|
+
# Client js uses assets not digested by rails.
|
73
|
+
# For any asset matching this regex, non-digested symlink will be created
|
74
|
+
# To disable symlinks set this parameter to nil.
|
75
|
+
config.symlink_non_digested_assets_regex = /\.(png|jpg|jpeg|gif|tiff|woff|ttf|eot|svg)/
|
76
|
+
|
43
77
|
end
|
@@ -14,10 +14,7 @@ namespace :assets do
|
|
14
14
|
|
15
15
|
desc "Compile assets with webpack"
|
16
16
|
task :webpack do
|
17
|
-
sh "cd client && npm run build:
|
18
|
-
<%- if options[:server_rendering] -%>
|
19
|
-
sh "cd client && npm run build:server"
|
20
|
-
<%- end -%>
|
17
|
+
sh "cd client && npm run build:production"
|
21
18
|
end
|
22
19
|
|
23
20
|
task :clobber do
|
@@ -8,18 +8,6 @@
|
|
8
8
|
"scripts": {
|
9
9
|
"postinstall": "cd client && npm install",
|
10
10
|
"rails-server": "echo 'visit http://localhost:3000/hello_world' && foreman start -f Procfile.dev",
|
11
|
-
"build:production:client": "(cd client && npm run build:production:client --silent)",
|
12
|
-
<%- if options.server_rendering? -%>
|
13
|
-
"build:production:server": "(cd client && npm run build:production:server --silent)",
|
14
|
-
<%- end -%>
|
15
|
-
"build:client": "(cd client && npm run build:client --silent",
|
16
|
-
<%- if options.server_rendering? -%>
|
17
|
-
"build:server": "(cd client && npm run build:server --silent)",
|
18
|
-
<%- end -%>
|
19
|
-
"build:dev:client": "(cd client && npm run build:dev:client --silent)",
|
20
|
-
<%- if options.server_rendering? -%>
|
21
|
-
"build:dev:server": "(cd client && npm run build:dev:server --silent)",
|
22
|
-
<%- end -%>
|
23
11
|
"test": "rspec"
|
24
12
|
}
|
25
13
|
}
|
@@ -3,7 +3,7 @@ require_relative "../rails_helper"
|
|
3
3
|
feature "Hello World", js: true do
|
4
4
|
scenario "the hello world example works" do
|
5
5
|
visit "/hello_world"
|
6
|
-
expect(heading).to have_text("
|
6
|
+
expect(heading).to have_text("Hello World")
|
7
7
|
expect(message).to have_text("Stranger")
|
8
8
|
name_input.set("John Doe")
|
9
9
|
expect(message).to have_text("John Doe")
|
@@ -36,6 +36,7 @@ Capybara.javascript_driver = :poltergeist
|
|
36
36
|
RSpec.configure do |config|
|
37
37
|
# Ensure that if we are running js tests, we are using latest webpack assets
|
38
38
|
# This will use the defaults of :js and :server_rendering meta tags
|
39
|
+
ReactOnRails::TestHelper.launch_node if ReactOnRails.configuration.server_render_method == "NodeJS"
|
39
40
|
ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
|
40
41
|
|
41
42
|
# Remove this line if you"re not using ActiveRecord or ActiveRecord fixtures
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import React, { PropTypes } from 'react';
|
2
2
|
import HelloWorldWidget from '../components/HelloWorldWidget';
|
3
|
-
import _ from 'lodash';
|
4
3
|
|
5
4
|
// Simple example of a React "smart" component
|
6
5
|
export default class HelloWorld extends React.Component {
|
@@ -14,11 +13,6 @@ export default class HelloWorld extends React.Component {
|
|
14
13
|
// How to set initial state in ES6 class syntax
|
15
14
|
// https://facebook.github.io/react/docs/reusable-components.html#es6-classes
|
16
15
|
this.state = { name: this.props.name };
|
17
|
-
|
18
|
-
// Uses lodash to bind all methods to the context of the object instance, otherwise
|
19
|
-
// the methods defined here would not refer to the component's class, not the component
|
20
|
-
// instance itself.
|
21
|
-
_.bindAll(this, 'updateName');
|
22
16
|
}
|
23
17
|
|
24
18
|
updateName(name) {
|
@@ -28,7 +22,7 @@ export default class HelloWorld extends React.Component {
|
|
28
22
|
render() {
|
29
23
|
return (
|
30
24
|
<div>
|
31
|
-
<HelloWorldWidget name={this.state.name} updateName={this.updateName} />
|
25
|
+
<HelloWorldWidget name={this.state.name} updateName={e => this.updateName(e)} />
|
32
26
|
</div>
|
33
27
|
);
|
34
28
|
}
|
@@ -1,5 +1,11 @@
|
|
1
|
+
import React from 'react';
|
1
2
|
import ReactOnRails from 'react-on-rails';
|
2
|
-
|
3
|
+
|
4
|
+
import HelloWorld from '../containers/HelloWorld';
|
5
|
+
|
6
|
+
const HelloWorldApp = (props) => (
|
7
|
+
<HelloWorld {...props} />
|
8
|
+
);
|
3
9
|
|
4
10
|
// This is how react_on_rails can see the HelloWorldApp in the browser.
|
5
11
|
ReactOnRails.register({ HelloWorldApp });
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import ReactOnRails from 'react-on-rails';
|
2
3
|
import { Provider } from 'react-redux';
|
3
4
|
|
4
5
|
import createStore from '../store/helloWorldStore';
|
@@ -7,7 +8,7 @@ import HelloWorld from '../containers/HelloWorld';
|
|
7
8
|
// See documentation for https://github.com/reactjs/react-redux.
|
8
9
|
// This is how you get props from the Rails view into the redux store.
|
9
10
|
// This code here binds your smart component to the redux store.
|
10
|
-
|
11
|
+
const HelloWorldApp = (props) => {
|
11
12
|
const store = createStore(props);
|
12
13
|
const reactComponent = (
|
13
14
|
<Provider store={store}>
|
@@ -16,3 +17,6 @@ export default (props) => {
|
|
16
17
|
);
|
17
18
|
return reactComponent;
|
18
19
|
};
|
20
|
+
|
21
|
+
// This is how react_on_rails can see the HelloWorldApp in the browser.
|
22
|
+
ReactOnRails.register({ HelloWorldApp });
|
@@ -6,10 +6,6 @@ import { compose, createStore, applyMiddleware, combineReducers } from 'redux';
|
|
6
6
|
// once your app has asynchronous actions.
|
7
7
|
import thunkMiddleware from 'redux-thunk';
|
8
8
|
|
9
|
-
// This provides an example of logging redux actions to the console.
|
10
|
-
// You'd want to disable this for production.
|
11
|
-
import loggerMiddleware from 'lib/middlewares/loggerMiddleware';
|
12
|
-
|
13
9
|
import reducers from '../reducers';
|
14
10
|
import { initialStates } from '../reducers';
|
15
11
|
|
@@ -27,7 +23,7 @@ export default props => {
|
|
27
23
|
|
28
24
|
const reducer = combineReducers(reducers);
|
29
25
|
const composedStore = compose(
|
30
|
-
applyMiddleware(thunkMiddleware
|
26
|
+
applyMiddleware(thunkMiddleware)
|
31
27
|
);
|
32
28
|
const storeCreator = composedStore(createStore);
|
33
29
|
const store = storeCreator(reducer, initialState);
|