Use Blaze templates inside of React
import React from 'react';
import Blaze from 'meteor/gadicc:blaze-react-component';
const App = () => (
<div>
<Blaze template="itemsList" items={items} />
</div>
);
Provided here for those that want it. Personally I think it's clearer to
use the <Blaze />
component directly.
import React from 'react';
import Blaze from 'meteor/gadicc:blaze-react-component';
const atForm = (props) => <Blaze {...props} template="atForm" />;
export { atForm }; // import { atForm } from 'myPackage';
You can also use a default export if you prefer (and your package has none of it's own exports, and just a single template).
You might want your package to provide optional React support. To be honest,
I feel it's clearer to rather give instructions to use the <Blaze />
component, as that makes it very clear what's going on. However, if you
plan to offer native React support in the future, this is a good way to
protect your users from future changes:
package.js:
api.use('gadicc:[email protected]', 'client', { weak: true });
api.addFiles('somefile.js', 'client');
api.export('YourReactComponent', 'client');
somefile.js:
YourReactComponent = null;
if (Package['gadicc:blaze-react-component']) {
var blazeToReact = Package['gadicc:blaze-react-component'].blazeToReact;
YourReactComponent = blazeToReact('YourBlazeTemplate');
}
And then, optionally, but for good practice, tell your users to:
import { YourReactComponent } from 'meteor/yourname:yourpackage';
// And use it as expected, with attributes just like in Blaze
const App = () => {
<div>
<YourReactComponent textArg="foo" blazeArg=bar />
</div>
};
- Inspired by https://github.com/gwendall/meteor-blaze-to-react/.