React guide article

This is the comment thread for the React article in the Meteor Guide.

Read the article: http://guide.meteor.com/react.html

The comment thread for each article appears at the very bottom of the page. Use this thread to post:

  • Interesting articles related to the content
  • New ways to do things that aren’t covered in the Guide
  • Suggestions for Guide improvements

Or anything else related to this topic that people could find useful!

2 Likes

I’m finding that if I don’t import React in the same place where I import render from react-dom, calls to render fail with the complaint that React isn’t defined.

My imports look like this:

import { Meteor } from 'meteor/meteor'; import { render } from 'react-dom'; import React from 'react'; import App from '../../ui/components/App.jsx';

Removing the React import results in the error.

Does that file use any JSX?

Yes, in the exact same way the example code in the guide uses it.

I think the Using Blaze with React section should be renamed to Using React Components in Blaze and that we should have a corresponding Using Blaze Templates in React. Or something along those lines.

My preferred (and biased) way of doing this is with my gadicc:blaze-react-component, which looks like this:

import React from 'react';
import Blaze from 'meteor/gadicc:blaze-react-component';

const App = () => (
  <div>
    <Blaze template="itemsList" items={items} />
  </div>
);

Alternatives include:

Both are for Meteor 1.2 and have hard dependencies on meteor-react. The former involves first converting the template in JS, and then using the newly created Component directly, whereas I preferred to have a single step and be clear that I’m using a Blaze component. I did however offer the same ability in case package authors wanted to use it. For the component syntax, I tried to keep it short and similar to react-template-helper.

I’m happy to do a PR for this if there’s a consensus around the approach, and/or open a separate topic for further discussion. I’m also happy to ‘donate’ the code to the Meteor namespace; I’m not too interested in maintaining another package, just felt it import to have something that works well straight away with 1.3.

As a newcomer to React it is really hard to choose between Flow Router and React Router. Maybe a little more opinion would help.

3 Likes

I think JSX compiles to stuff that uses React, so you might need to import React even if the file doesn’t contain the words React anywhere.

1 Like

I think it could be worth opening a new discussion to decide which package for this is the best to recommend! I agree that having this section would be awesome!

Here we go :slight_smile: Best way to import Blaze templates into React

2 Likes

Yes, it is required that React be defined if you use JSX. There’s an eslint rule that picks this up (see the code style guide article for how to use eslint if you are interested): https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md

Fair enough! We probably squibbed on this one @sashko. Perhaps we should do a poll of what people use?

3 Likes

Thanks for this @gadicc

2 Likes

I would love to see a howto on Redux and Meteor. Specifically:

  • How to import reactive data into Redux state and keep it up-to-date

  • How to differentiate between local and non-local changes

  • How to subscribe/unsubscribe based on the application state

Essentially, I’d like to see how we can use Redux as the single source of truth for our apps, while still benefitting from Meteor’s Mongo proxy and reactivity.

1 Like

I’m new to meteor and created a first “test” application in version 1.2.1 and react.

I had a lot of fun with it because meteor supplied me almost everything I need to jump in very quick and also with great tutorials.

Now with Meteor 1.3, I got the feeling that everything is so overloaded and complicated.
What type of router should I use? What is the best way to receive my mongo data-collections? In addition (just my issue) is, that I have to learn how ECMA 2015 works with modules.

For so many breaking changes, it would be nice to have either a well structured turorial or even better a video turorial.

Don’t understand me wrong: You probably made a great job, but for beginners there want to work with meteor are to many changes and to many packages out. Maybe this is a general problem in JavaScript too…

Best regards

4 Likes

Have you tried doing the React tutorial again? It has been updated with all-new recommendations for some of this stuff.

1 Like

Abhi Aiyer has this:

2 Likes

The guide calls containers from the router. Instead is it OK to nest containers inside other react components? Can containers have defaultProps?

Yes! definitely.

Not that I know of. Perhaps you could just use _.default or something inside the data function?

It would be cool if the guide had more examples of containers. It’s taking a lot of experimenting to figure out what I can and cannot do in terms of props, propTypes, defaultProps, contextTypes, getChildContext, state, initial state etc. Especially when you have deeply nested components.

3 Likes

I also agree with @rdagger to have more explanation on what createContainer can do. Maybe a more extensible guide on manage mutating variables when using React and Meteor. Because now it’s confusing whether you will use React’s this.state or Meteor’s ReactiveVar and ReactiveDict.

3 Likes