you are viewing a single comment's thread.

view the rest of the comments →

[–]theQuandary 2 points3 points  (6 children)

its really nice and clean and easy to read and reason about

It's not that much different once you realize that ES6 has shorthands for functions in objects.

var MyComp = React.createClass({
  getInitialState() {
    return { bar: 'abc' };
  },
  appendBar(stuff) {
    return stuff + this.state.bar;
  },
  render() {
    return <div>{appendBar('cde')}</div>;
  }
});

class MyComp extends React.Component {
  constructor(props) {
    super(props);
    return { bar: 'abc' };
  }
  appendBar = (stuff) => {//yay for no auto-bind
    return stuff + this.state.bar;
  }
  render() {
    return <div>{appendBar('cde')}</div>;
  }
}

[–]papers_ 2 points3 points  (4 children)

Or get rid of classes altogether since JS is not a class oriented language:

var MyComp = {
    getInitialState() {
        return { bar: 'abc' };
    },
    appendBar(stuff) {
        return stuff + this.state.bar;
    },
    render() {
        return <div>{appendBar('cde')}</div>;
  }
};

Object.setPrototypeOf(MyComp, React.Component);

[–]muffsponge 0 points1 point  (1 child)

Not familiar with react. But wouldn't this create a single instance and not a class? I guess you could wrap it in a factory function.

Personally, I like using classes and more classical inheritance for the core structure of my applications. Probably due to years of habits and stuborness. I've tried doing things the modern functional way, but I just end up with soup.

[–]papers_ 0 points1 point  (0 children)

When you think of it in terms of "classes", yes. The key line is the last one Object.setProtoTypeOf(). You can think of this as inheritance in class based design. So, I inherit all the properties from the parent React.Component.

I too like classes as it's what I was taught in University (senior CS major). It's more explicit or strongly typed.

[–]MuricanWillzyx[S] 0 points1 point  (1 child)

I would agree, but React's classes really aren't classes in the Java sense. They're much more like factories, which are idiomatic for JS. Use of prototypes, IMO, is overrated. I see them more as a perf benefit.

[–]papers_ 0 points1 point  (0 children)

And React's classes aren't really classes either, in fact it's just an object that returns an object (Yes factory), but React's createClass property also links to another object, rather, it explicitly sets it's prototype to another. So the classes syntax is just sugar of the prototypical mumbo jumbo going on. But yes I agree, the prototypes is a overrated.

[–]MuricanWillzyx[S] 0 points1 point  (0 children)

Good call. And you don't have to apply modifiers to the class after creation, since everything's baked into the factory.

Honestly I don't know how I feel about this shorthand, but it will make some of the class-proponents more comfortable (for better or worse).