All notable changes to this project's source code will be documented in this file. Items under Unreleased
is upcoming features that will be out in next version.
Contributors: please follow the recommendations outlined at keepachangelog.com. Please use the existing headings and styling as a guide, and add a link for the version diff at the bottom of the file. Also, please update the Unreleased
link to compare to the latest release version.
Please add entries here for your pull requests.
6.8.2 - 2017-03-24
- Change webpack output path to absolute and update webpack to version ^2.3.1. #771 by cheremukhin23.
6.8.1 - 2017-03-21
- Fixed error "The node you're attempting to unmount was rendered by another copy of React." #706 when navigating to cached page using Turbolinks #763 by szyablitsky.
6.8.0 - 2017-03-06
6.7.2 - 2017-03-05
- Improve i18n Integration with a better error message if the value of the i18n directory is invalid. #748 by justin808.
6.7.1 - 2017-02-28
No changes other than a test fix.
6.7.0 - 2017-02-28
- If you installed 6.6.0, you will need to comment out the line matching i18n_dir unless you are using this feature. 6.7.1 will give you an error like:
Errno::ENOENT: No such file or directory @ rb_sysopen - /tmp/build_1444a5bb9dd16ddb2561c7aff40f0fc7/my-app-816d31e9896edd90cecf1402acd002c724269333/client/app/libs/i18n/translations.js
Commenting out this line addresses the issue:
config.i18n_dir = Rails.root.join("client", "app", "libs", "i18n")
- Allow using rake task to generate javascript locale files. The test helper automatically creates the localization files when needed. #717 by JasonYCHuang.
- Upgrade Rails to 4.2.8 to fix security vulnerabilities in 4.2.5. #735 by hrishimittal.
- Fix spec failing due to duplicate component. #734 by hrishimittal.
6.6.0 - 2017-02-18
6.5.1 - 2017-02-11
- Allow using gem without sprockets. #671 by fc-arny.
- Fixed issue #706 with "flickering" components when they are unmounted too early #709 by szyablitsky.
- Small formatting fix for errors #703 by justin808.
6.5.0 - 2017-01-31
- Allow generator function to return Object with property
renderedHtml
(already could return Object with propsredirectLocation, error
) rather than a React component or a function that returns a React component. One reason to use a generator function is that sometimes in server rendering, specifically with React Router v4, you need to return the result of calling ReactDOMServer.renderToString(element). #689 by justin808.
- Fix incorrect "this" references of Node.js SSR #690 by nostophilia.
6.4.2 - 2017-01-17
- Added OS detection for install generator, system call for Windows and unit-tests for it. #666 by GeorgeGorbanev.
6.4.1 - 2017-1-17
No changes.
6.4.0 - 2017-1-12
- Since foreman is no longer a dependency of the React on Rails gem, please run
gem install foreman
. If you are using rvm, you may wish to runrvm @global do gem install foreman
to install foreman for all your gemsets.
- Automatically generate i18n javascript files for
react-intl
when the serve starts up. #642 by JasonYCHuang.
6.3.5 - 2017-1-6
- The redux generator now creates a HelloWorld component that uses redux rather than local state. #669 by justin808.
6.3.4 - 2016-12-25
6.3.3 - 2016-12-25
- By using the hook on
turbolinks:before-visit
to unmount the components, we can ensure that components are unmounted even when Turbolinks cache is disabled. Previously, we usedturbolinks:before-cache
event hook. #644 by volkanunsal. - Added support for Ruby 2.0 #651 by bbonamin.
6.3.2 - 2016-12-5
- The
react_component
method was raising aNameError
whenReactOnRailsHelper
was included in a plain object. #636 by jtibbertsma. - "Node parse error" for node server rendering. #641 by alleycat-at-git and rocLv
- Better error handling when the react-on-rails node package entry is missing.#602 by benjiwheeler.
6.3.1 - 2016-11-30
6.3.0 - 2016-11-30
-
Modified register API to allow registration of renderers, allowing a user to manually render their app to the DOM. This allows for code splitting and deferred loading. #581 by jtibbertsma.
-
Updated Basic Generator & Linters. Examples are simpler. #624 by Judahmeek.
-
Slight improvement to the 'no hydrated stores' error. #605 by cookiefission.
6.2.1 - 2016-11-19
-
Removed unnecesary passing of context in the HelloWorld Container example and basic generator. #612 by justin808
-
Turbolinks 5 bugfix to use
before-cache
, notbefore-render
. #611 by volkanunsal.
6.2.0 - 2016-11-19
- Updated the generator templates to reflect current best practices, especially for the redux version. #584 by nostophilia.
6.1.2 - 2016-10-24
- Added compatibility with older manifest.yml files produced by Rails 3 Sprockets when symlinking digested assets during precompilation #566 by etripier.
6.1.1 - 2016-09-09
- React on Rails was incorrectly failing to create symlinks when a file existed in the location for the new symlink. #491 by robwise and justin808.
6.1.0 - 2016-08-21
- Node option for installer added as alternative for server rendering #469 by jbhatab.
- Server rendering now supports contexts outside of browser rendering, such as ActionMailer templates #486 by eacaps.
- Added authenticityToken() and authenticityHeaders() javascript helpers for easier use when working with CSRF protection tag generated by Rails #517 by dzirtusss.
- Updated JavaScript error handling on the client side. Errors in client rendering now pass through to the browser #521 by dzirtusss.
- React on Rails now correctly parses single-digit version strings from package.json #491 by samphilipd .
- Fixed assets symlinking to correctly use filenames with spaces. Begining in #510, ending in #513 by dzirtusss.
- Check encoding of request's original URL and force it to UTF-8 #527 by lucke84
6.0.5 - 2016-07-11
6.0.4 - 2016-06-13
6.0.3 - 2016-06-07
- Added assets symlinking support on Heroku #446 by Alexey Karasev.
6.0.2 - 2016-06-06
- Fix colisions in ids of DOM nodes generated by
react_component
by indexing in using an UUID rather than an auto-increment value. This means that it should be overriden using theid
parameter ofreact_component
if one wants to generate a predictable id (e.g. for testing purpose). See Issue #437. Fixed in #438 by Michael Baudino.
6.0.1 - 2016-05-27
- Allow for older version of manifest.json for older versions of sprockets. See Issue #435. Fixed in #436 by alleycat-at-git.
6.0.0 - 2016-05-25
-
Added automatic compilation of assets at precompile is now done by ReactOnRails. Thus, you don't need to provide your own assets.rake file that does the precompilation. #398 by robwise, jbhatab, and justin808.
-
Migration to v6
-
Do not run the generator again if you've already run it.
-
See shakacode/react-webpack-rails-tutorial/pull/287 for an example of upgrading from v5.
-
To configure the asset compliation you can either
- Specify a
config/react_on_rails
setting fornpm_build_production_command
to be nil to turn this feature off. - Specify the script command you want to run to build your production assets, and remove your assets.rake file.
- Specify a
-
If you are using the ReactOnRails test helper, then you will need to add the 'config.npm_build_test_command' to your config to tell react_on_rails what command to run when you run rspec.
-
-
See shakacode/react-webpack-rails-tutorial #287 for an upgrade example. The PR has a few comments on the upgrade.
Here is the addition to the generated config file:
# This configures the script to run to build the production assets by webpack. Set this to nil
# if you don't want react_on_rails building this file for you.
config.npm_build_production_command = "npm run build:production"
# If you are using the ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
# with rspec then this controls what npm command is run
# to automatically refresh your webpack assets on every test run.
config.npm_build_test_command = "npm run build:test"
- Fixed errors when server rendered props contain \u2028 or \u2029 characters #375 by mariusandra
- Fixed "too early unmount" which caused problems with Turbolinks 5 not updating the screen #425 by szyablitsky
- Experimental ability to use node.js process for server rendering. See #380 by alleycat-at-git.
- Non-digested version of assets in public folder #413 by alleycat-at-git.
- Cache client/node_modules directory to prevent Heroku from reinstalling all modules from scratch #324 by modosc.
- ReactOnRails.reactOnRailsPageLoaded() is exposed in case one needs to call this manually and information on async script loading added. See #315 by SqueezedLight.
- #398 by robwise, jbhatab, and justin808 contains:
- Only one webpack config is generated for server and client config. Package.json files were changed to reflect this.
- Added npm_build_test_command to allow developers to change what npm command is automatically run from rspec.
- Replace URI with Addressable gem. See #405 by lucke84
- #398 by robwise, jbhatab, and justin808 contains:
- Server rendering is no longer an option in the generator and is always accessible.
- Removed lodash, jquery, and loggerMiddleware from the generated code.
- Removed webpack watch check for test helper automatic compilation.
5.2.0 - 2016-04-08
- Support for React 15.0 to react_on_rails. See #379 by brucek.
- Support for Node.js server side rendering. See #380 by alleycat and doc
- Generator removals to simplify installer. See #364 by jbhatab.
- Removed options for heroku, boostrap, and the linters from generator.
- Removed install for the Webpack Dev Server, as we can now do hot reloading with Rails, so the complexity of this feature is not justified. Nevertheless, the setup of React on Rails still supports this setup, just not with the generator.
- Documentation added for removed installer options.
5.1.1 - 2016-04-04
- Security Fixes: Address failure to sanitize console messages when server rendering and displaying in the browser console. See #366 and #370 by justin808
- railsContext includes the port number and a boolean if the code is being run on the server or client.
5.1.0 - 2016-04-03
All 5.1.0 changes can be found in #362 by justin808.
- Generator enhancements
- Generator adds line to spec/rails_helper.rb so that running specs will ensure assets are compiled.
- Other small changes to the generator including adding necessary npm scripts to allow React on Rails to build assets.
- Npm modules updated for generator.
- Added babel-runtime in to the client/package.json created.
- Server rendering
- Added more diagnostics for server rendering.
- Calls to setTimeout and setInterval are not logged for server rendering unless env TRACE_REACT_ON_RAILS is set to YES.
- Updated all project npm dependencies to latest.
- Update to node 5.10.0 for CI.
- Added babel-runtime as a peer dependency for the npm module.
5.0.0 - 2016-04-01
- Added
railsContext
, an object which gets passed always as the second parameter to both react component and redux store generator functions, both for server and client rendering. This provides data like the current locale, the pathname, etc. The data values are customizable by a new configuration calledrendering_extension
where you can create a module with a method calledrendering_extension
. This allows you to add additional values to the Rails Context. Implement one static method calledcustom_context(view_context)
and return a Hash. See #345 by justin808
- Previously, you could pass arbitrary additional html attributes to react_component. Now, you need to pass them in as a named parameter
html_options
to react_component.
- You must provide named attributes, including
props
for view helperreact_component
. See this commit for an example migration used for www.reactrails.com.
4.0.3 - 2016-03-17
ReactOnRailsHelper#react_component
: Invalid deprecation message when called with only one paramter, the component name.
4.0.2 - 2016-03-17
ReactOnRails::Controller#redux_store
: 2nd parameter changed to a named parameterprops
for consistency.
4.0.1 - 2016-03-16
- Switched to
heroku buildpacks:set
syntax rather than using a.buildpacks
file, which is deprecated. See #319 by esauter5. Includes both generator and doc updates.
4.0.0 - 2016-03-14
- spec/dummy is a full sample app of React on Rails techniques including the hot reloading of assets from Rails!
- Added helpers
env_stylesheet_link_tag
andenv_javascript_include_tag
to support hot reloading Rails. See the README.md for more details and see the example application inspec/dummy
. Also see how this is used in the tutorial: application.html.erb - Added optional parameter for ReactOnRails.getStore(name, throwIfMissing = true) so that you can check if a store is defined easily.
- Added controller
module ReactOnRails::Controller
. Adds methodredux_store
to setup redux stores in the view. - Added option
defer: true
for view helperredux_store
. This allows the view helper to specify the props for store hydration, yet still render the props at the bottom of the view. - Added view helper
redux_store_hydration_data
to render the props on the application's layout, near the bottom. This allows for the client hydration data to be parsed after the server rendering, which may result in a faster load time. - The checker for outdated bundles before running tests will two configuration options:
generated_assets_dir
andwebpack_generated_files
. - Better support for Turbolinks 5!
- Fixed generator check of uncommitted code for foreign languages. See #303 by nmatyukov.
- Added several parameters used for ensuring webpack assets are built for running tests:
config.generated_assets_dir
: Directory where your generated webpack assets go. You can have only one directory for this.config.webpack_generated_files
: List of files that will get created in thegenerated_assets_dir
. The test runner helper will ensure these generated files are newer than any of the files in the client directory.
- Generator default for webpack generated assets is now
app/assets/webpack
as we use this for both JavaScript and CSS generated assets.
- The test runner "assets up to date checker" is greatly improved.
- Lots of doc updates!
- Improved the spec/dummy sample app so that it supports CSS modules, hot reloading, etc, and it can server as a template for a new ReactOnRails installation.
- Deprecated calling
redux_store(store_name, props)
. The API has changed. Useredux_store(store_name, props: props, defer: false)
A new option calleddefer
allows the rendering of store hydration at the bottom of the your layout. Placeredux_store_hydration_data
on your layout. config.server_bundle_js_file
has changed. The default value is now blank, meaning no server rendering. Addtionally, if you specify the file name, you should not include the path, as that should be specified in theconfig.generated_assets_dir
.config.generated_assets_dirs
has been renamed toconfig.generated_assets_dir
(singular) and it only takes one directory.
3.0.6 - 2016-03-01
3.0.5 - 2016-02-26
3.0.4 - 2016-02-25
- Updated CHANGELOG.md to include contributors for each PR.
- Fixed config.server_bundle_js file value in generator to match generator setting of server rendering. See #295 by aaronvb.
3.0.3 - 2016-02-21
- Cleaned up code in
spec/dummy
to latest React and Redux APIs. See #282. - Update generator messages with helpful information. See #279.
- Other small generated comment fixes and doc fixes.
3.0.2 - 2016-02-15
- Fixed missing information in the helpful message after running the base install generator regarding how to run the node server with hot reloading support.
3.0.1 - 2016-02-15
- Fixed several jscs linter issues.
3.0.0 - 2016-02-15
- Fix Bootstrap Sass Append to Gemfile, missing new line. #262.
- Added helper
redux_store
and associated JavaScript APIs that allow multiple React components to use the same store. Thus, you initialize the store, with props, separately from the components. - Added forman to gemspec in case new dev does not have it globally installed. #248.
- Support for Turbolinks 5! #270.
- Added better error messages for
ReactOnRails.register()
. #273.
-
Calls to
react_component
should use a named argument of props. For example, change this:<%= react_component("ReduxSharedStoreApp", {}, prerender: false, trace: true) %>
to
<%= react_component("ReduxSharedStoreApp", props: {}, prerender: false, trace: true) %>
You'll get a deprecation message to change this.
-
Renamed
ReactOnRails.configure_rspec_to_compile_assets
toReactOnRails::TestHelper.configure_rspec_to_compile_assets
. The code has also been optimized to check for whether or not the compiled webpack bundles are up to date or not and will not run if not necessary. If you are using non-standard directories for your generated webpack assets (app/assets/javascripts/generated
andapp/assets/stylesheets/generated
) or have additional directories you wish the helper to check, you need to update your ReactOnRails configuration accordingly. See documentation for how to do this. #253. -
You have to call
ReactOnRails.register
to register react components. This was deprecated in v2. #273.
- spec/dummy/spec/rails_helper.rb for an example. Add this line to your
rails_helper.rb
:
RSpec.configure do |config|
# Ensure that if we are running js tests, we are using latest webpack assets
ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
- Change view helper calls to react_component to use the named param of
props
. See forum post Using Regexp to update to ReactOnRails v3.
2.3.0 - 2016-02-01
- Added polyfills for
setInterval
andsetTimeout
in case other libraries expect these to exist. - Added much improved debugging for errors in the server JavaScript webpack file.
- See #244 for these improvements.
2.2.0 - 2016-01-29
- New JavaScript API for debugging TurboLinks issues. Be sure to see turbolinks docs.
ReactOnRails.setOptions({ traceTurbolinks: true });
. Removed the filedebug_turbolinks
added in 2.1.1. See #243.
2.1.1 - 2016-01-28
- Fixed regression where apps that were not using Turbolinks would not render components on page load.
ReactOnRails.render
returns a virtualDomElement Reference to your React component's backing instance. See #234.debug_turbolinks
helper for debugging turbolinks issues. See turbolinks.- Enhanced regression testing for non-turbolinks apps. Runs all tests for dummy app with turbolinks both disabled and enabled.
2.1.0 - 2016-01-26
- Added EnsureAssetsCompiled feature so that you do not accidentally run tests without properly compiling the JavaScript bundles. Add a line to your
rails_helper.rb
file to check that the latest Webpack bundles have been generated prior to running tests that may depend on your client-side code. See docs for more detailed instructions. #222 - Added migration guide for migrating from React-Rails. #219
- Added React on Rails Doctrine to docs. Discusses the project's motivations, conventions, and principles. #220
- Added ability to skip
display:none
style in the generated content tag for a component. Some developers may want to disable inline styles for security reasons. See generated config initializer file for example on settingskip_display_none
. #218
- Changed message when running the dev (a.k.a. "express" server). #227
- Fixed handling of Turbolinks. Code was checking that Turbolinks was installed when it was not yet because some setups load Turbolinks after the bundles. The changes to the code will check if Turbolinks is installed after the page loaded event fires. Code was also added to allow easy debugging of Turbolinks, which should be useful when v5 of Turbolinks is released shortly. Details of how to configure Turbolinks with troubleshooting were added to docs/additional-reading/turbolinks.md. #221
- Fixed issue with already initialized constant warning appearing when starting a Rails server #226
- Fixed to make backwards compatible with Ruby v2.0 and updated all Ruby and Node dependencies.
- Added better messages after generator runs. #210
- Fixed bug with version matching between gem and npm package.
- Move JavaScript part of react_on_rails to npm package 'react-on-rails'.
- Converted JavaScript code to ES6! with tests!
- No global namespace pollution. ReactOnRails is the only global added.
- New API. Instead of placing React components on the global namespace, you instead call ReactOnRails.register, passing an object where keys are the names of your components:
import ReactOnRails from 'react-on-rails';
ReactOnRails.register({name: component});
Best done with Object destructing:
import ReactOnRails from 'react-on-rails';
ReactOnRails.register(
{
Component1,
Component2
}
);
Previously, you used
window.Component1 = Component1;
window.Component2 = Component2;
This would pollute the global namespace. See details in the README.md for more information.
- Your jade template for the WebpackDevServer setup should use the new API:
ReactOnRails.render(componentName, props, domNodeId);
such as:
ReactOnRails.render("HelloWorldApp", {name: "Stranger"}, 'app');
- All npm dependency libraries updated. Most notable is going to Babel 6.
- Dropped support for react 0.13.
- JS Linter uses ShakaCode JavaScript style: https://github.com/shakacode/style-guide-javascript
- Generators account these differences.
- Update the
react_on_rails
gem. - Remove
//= require react_on_rails
from any files such asapp/assets/javascripts/application.js
. This file comes from npm now. - Search you app for 'generator_function' and remove lines in layouts and rb files that contain it. Determination of a generator function is handled automatically.
- Find your files where you registered client and server globals, and use the new ReactOnRails.register syntax. Optionally rename the files
clientRegistration.jsx
andserverRegistration.jsx
rather thanGlobals
. - Update your index.jade to use the new API
ReactOnRails.render("MyApp", !{props}, 'app');
- Update your webpack files per the example commit. Remove globally exposing React and ReactDom, as well as their inclusion in the
entry
section. These are automatically included now. - Run
cd client && npm i --save react-on-rails
to get react-on-rails into yourclient/package.json
. - You should also update any other dependencies if possible to match up with the react-webpack-rails-tutorial. This includes updating to Babel 6.
- If you want to stick with Babel 5 for a bit, see Issue #238.
- Missing Lodash from generated package.json #175
- Rails 3.2 could not run generators #182
- Better placement of jquery_ujs dependency #171
- Add more detailed description when adding --help option to generator #161
- Lots of better docs.
- Support
--skip-bootstrap
or-b
option for generator. - Create examples tasks to test generated example apps.
- Fix non-server rendering configuration issues.
- Fix application.js incorrect overwritten issue.
- Fix Gemfile dependencies.
- Fix several generator issues.
- Removed templates/client folder.
1.1.1 - 2015-11-28
- Support for React Router.
- Error and redirect handling.
- Turbolinks support.
- Fix several generator related issues.