

Integrating React with Meteor - djmashko2
http://info.meteor.com/blog/meteor-the-missing-infrastructure-for-building-great-react-apps

======
pluma
> Meteor: the missing infrastructure for building great React apps

Extremely bold words as usual. I don't think I've ever seen any JS technology
that manufactures as much hype as Meteor. Every single article from Meteor
makes it sound like the best thing since sliced Jesus.

Are there any reliable numbers on Meteor adoption (and retention)? If you
listen to people using Meteor it's already more popular than jQuery but
everybody else seems apathetic at best. If you go by Stackoverflow numbers
(which Meteor shows off on its homepage), it's merely 1/10th as popular as
AngularJS (and roughly as popular as express, which never even came close in
terms of hype).

~~~
echoless
If you try building a realtime single page app using Meteor and measure the
amount of time it took you to complete it, you'll find that the hype is
justified.

~~~
beefsack
But at the expense of performance? I've written a number of applications in
Meteor and continually struggle to scale them, even to tens of concurrent
users.

~~~
Siyfion
Well [http://mostexclusivewebsite.com/](http://mostexclusivewebsite.com/)
currently has 46,000 users concurrently connected, in-line, receiving live
updates, waiting for a ticket. So yeah, I would go so far as to say that
Meteor can be scaled pretty well.

~~~
beefsack
I've just tried to access the site and it's failing to load half the time, and
the other half it's taking over a minute to load. It's awesome you're getting
traffic but I'm not sure you can say you've successfully scaled your app right
at the moment.

------
pgm8705
Interesting to see this implemented as a mixin when they just announced
yesterday they are fully supporting es6. Looking forward to building some side
projects with this and seeing how it compares to using react + flux.

~~~
avital
Hi, I wrote this blog post.

We were trying to keep our API surface area small with one way to load data
into components, but you're right -- we should probably /also/ add a ES6 base
class as a second option, and let the people choose which they prefer.

A lot of React developers still prefer mixins -- react-router recently
switched from mixins to ES6 classes and then changed their mind "until ES6
classes have better answers to replace what mixins do (like decorators).":
[https://github.com/rackt/react-
router/blob/master/UPGRADE_GU...](https://github.com/rackt/react-
router/blob/master/UPGRADE_GUIDE.md#0132---0133)

~~~
anarchy8
That is very disappointing. Decorators already exist in Babel and they work
perfectly. I don't know what they're waiting for

~~~
pspeter3
I suspect they're waiting for the proposal to be more stable for the official
integration. This seems like a great opportunity for the community to write a
decorator and let a convention form before it gets merged into the core
framework

------
metaverse
What advantages does a meteor+react setup have vs pouchdb+react (synced to
couch in backend)? I would think, with meteor you get the backend rendering
(for SEO), and with pouch you get a DB API on the fronted that's available
offline.

~~~
Lazare
Meteor's story for backend rendering is the spiderable package, which works as
follows: "When a spider requests an HTML snapshot of a page the Meteor server
runs the client half of the application inside phantomjs, a headless browser,
and returns the full HTML generated by the client code."

That's not really a good solution for all the obvious reasons. (Speed,
resource usage, dependencies.) Plus, by that logic _every_ client-side webapp
supports being rendered on the server, so that's not even a meteor-specific
advantage.

Conversely, React actually does supports true universal (aka isomorphic) apps;
you can pre-render the app on the server using node ( _without_ needing a
headless browser), ship it to the client, and rehydrate it. (Ember is working
on shipping the same functionality under the name FastBoot.) Meteor doesn't
have anything like that.

I'm sure meteor+react has some advantages over pouchdb+react, but it's not
because of server side rendering. :)

(Well, as far as I know. I haven't been paying much attention to Meteor
development, so it's possible the story has changed in the last few months.
But last I checked, true server-side rendering was easy with react, but not
really possible with meteor.)

~~~
djmashko2
React integration should make implementing good server-side rendering much
easier. There is already a discussion and community project around this:
[https://github.com/meteor/react-
packages/issues/15](https://github.com/meteor/react-packages/issues/15)

~~~
Lazare
That's good to hear!

------
mwcampbell
Will Meteor work with React Native? I'd guess so, since React Native
implements XHR and other non-DOm APIs one might expect to find in a browser.

~~~
drew-y
They alluded to it here: [http://info.meteor.com/blog/whats-coming-in-
meteor-12-and-be...](http://info.meteor.com/blog/whats-coming-in-
meteor-12-and-beyond)

>"Mobile advances. There are many exciting possibilities in the mobile build
toolchain, from new technologies like React Native to a wide range of tooling
opportunities relating to cross-platform building and debugging.

With your help, we'll have more to say about these over the coming months."

------
estefan
I made a toy project once shortly after meteor had just been released. I just
kept bricking myself that I'd overlook some security setting that would allow
people to run arbitrary queries against my DB. When I also looked into scaling
I gave up.

Now with the way things have gone with an emphasis on mobile, most sites I'd
want to make would be better written as REST-style app servers with pluggable
clients.

~~~
Siyfion
Firstly, your concern about security is completely unfounded; Meteor only
allows you to run queries against the database if you write specific
ALLOW/DENY rules to let them through. Otherwise, all DB calls go through
Meteor methods that are run both on the client (for optimistic updates) and on
the server (in a controlled environment). So you let through whatever you
_choose_ to let through.

Secondly, Meteor has several modules that allow you to expose Meteor methods
as a REST frontend, so it's a trivial change to get that functionality added
in.

------
zackify
I would like to see this with es6 components

~~~
Offler
You mean web components? I'm not sure it's possible to pass in anything other
then strings as values via their attribute changed callback. They simply
aren't as well designed and powerful as React components.

~~~
pluma
By ES6 components OP likely means React components defined using the ES2015
(aka ES6) "class" syntax. The most notable difference is that they don't
support mixins, which Meteor seems to take for granted.

