From 2a9bd2b4c9bd70a2d4b7840922582ecbccaa5b9e Mon Sep 17 00:00:00 2001 From: Omer Ganim Date: Sun, 15 May 2016 18:14:42 +0300 Subject: [PATCH] add context parameter to stateless components (fixes #130) --- README.md | 4 ++-- src/reactSupport.js | 8 ++++---- src/reactTemplates.js | 2 +- test/data/stateless.rt.js | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 48055cd..4e7d07e 100644 --- a/README.md +++ b/README.md @@ -380,7 +380,7 @@ define([ Since React v0.14, [React allows defining a component as a pure function of its props](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions). To enable creating a stateless component using react templates, add the `rt-stateless` attribute to the template's root element. Using `rt-stateless` generates a stateless functional component instead of a render function. -The resulting function receives a `props` parameter to be used in the template instead of `this.props`. +The resulting function receives `props` and `context` parameters to be used in the template instead of `this.props`. ###### Sample: ```html @@ -393,7 +393,7 @@ define([ 'lodash' ], function (React, _) { 'use strict'; - return function (props) { + return function (props, context) { return React.createElement('div', {}, 'Hello ', props.person); }; }); diff --git a/src/reactSupport.js b/src/reactSupport.js index 21ae026..bcc08f4 100644 --- a/src/reactSupport.js +++ b/src/reactSupport.js @@ -35,10 +35,10 @@ _.forEach(reactSupportedAttributes, attributeReactName => { const htmlSelfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']; -const templateAMDTemplate = _.template("define(<%= name ? '\"'+name + '\", ' : '' %>[<%= requirePaths %>], function (<%= requireNames %>) {\n'use strict';\n <%= injectedFunctions %>\nreturn function(<%= statelessProps %>){ return <%= body %>};\n});"); -const templateCommonJSTemplate = _.template("'use strict';\n<%= vars %>\n\n<%= injectedFunctions %>\nmodule.exports = function(<%= statelessProps %>){ return <%= body %>};\n"); -const templateES6Template = _.template('<%= vars %>\n\n<%= injectedFunctions %>\nexport default function(<%= statelessProps %>){ return <%= body %>}\n'); -const templatePJSTemplate = _.template(`var <%= name %> = function (<%= statelessProps %>) { +const templateAMDTemplate = _.template("define(<%= name ? '\"'+name + '\", ' : '' %>[<%= requirePaths %>], function (<%= requireNames %>) {\n'use strict';\n <%= injectedFunctions %>\nreturn function(<%= statelessParams %>){ return <%= body %>};\n});"); +const templateCommonJSTemplate = _.template("'use strict';\n<%= vars %>\n\n<%= injectedFunctions %>\nmodule.exports = function(<%= statelessParams %>){ return <%= body %>};\n"); +const templateES6Template = _.template('<%= vars %>\n\n<%= injectedFunctions %>\nexport default function(<%= statelessParams %>){ return <%= body %>}\n'); +const templatePJSTemplate = _.template(`var <%= name %> = function (<%= statelessParams %>) { <%= injectedFunctions %> return <%= body %> }; diff --git a/src/reactTemplates.js b/src/reactTemplates.js index a2e1a27..6fec433 100644 --- a/src/reactTemplates.js +++ b/src/reactTemplates.js @@ -576,7 +576,7 @@ function convertRT(html, reportContext, options) { requirePaths, vars, name: options.name, - statelessProps: context.stateless ? 'props' : '' + statelessParams: context.stateless ? 'props, context' : '' }; let code = templates[options.modules](data); if (options.modules !== 'typescript' && options.modules !== 'jsrt') { diff --git a/test/data/stateless.rt.js b/test/data/stateless.rt.js index 4224670..5df53d1 100644 --- a/test/data/stateless.rt.js +++ b/test/data/stateless.rt.js @@ -3,7 +3,7 @@ define([ 'lodash' ], function (React, _) { 'use strict'; - return function (props) { + return function (props, context) { return React.createElement('div', {}, 'Hello ', props.person); }; });