News for hackers. Stuff that matters.
Re:React 16 by overcast on Tuesday September 26, 2017 @12:37PM (#15340265)
Vue is less complex, easy api, and easier to jump into. React is more complex, bigger learning curve, but more featured. Vue has satisfied my needs for 99% of projects.
Re:React 16 by tomelders on Tuesday September 26, 2017 @12:47PM (#15340368)
This really boggles my mind. Having looked very closely at both (and being a react developer full time), I can not recognise this assessment. I just can't see how people can claim that Vue is simpler or easier than React.

React is idiomatic javascript. Vue is it's own quirky thing that doesn't feel anything at all like Javascript to me.

Re:React 16 by irrational on Tuesday September 26, 2017 @03:56PM (#15342009)
Different peoples brains work differently. React clicks with your brain, but not Vue. I've been doing web development since 1996. I read through both the React documentation and the Vue documentation. Vue just clicked with my brain. I totally groked it from the beginning. React... not so much. Vue has been amazing for us so far.
Re:React 16 by overcast on Tuesday September 26, 2017 @01:08PM (#15340567)
I'm not sure what feeling anything like JavaScript has to do with the discussion. No one asked which framework is most like JavaScript. I don't think JSX turning JavaScript into some weird XML/HTML hybrid feels like JavaScript either. Sure you can use it without it, but why would you? Vue works for me and others, whereas React works for you, and others. Let's just keep working on our projects.
Re:React 16 by tomelders on Tuesday September 26, 2017 @02:55PM (#15341542)
Because the rest of your application is Javascript. Less cognitive burden when you switch to working on different layers of your application.
Re:React 16 by irrational on Tuesday September 26, 2017 @03:58PM (#15342027)
Wait, do you really experience cognitive burden when switching between html, js, and css? It surprises me if you do.
Re:React 16 by tomelders on Tuesday September 26, 2017 @04:14PM (#15342133)
I'm talking about switching between a context where there are first class functions that can be easily passed around, to a context where there's some archaic and magical, non idiomatic convention based on string based dependency injection, or magical way of writing attributes.
Re:React 16 by overcast on Tuesday September 26, 2017 @03:37PM (#15341864)
Except JSX isn't JavaScript, and no one uses React without it. So it's arguably just as much of a cognitive burden.
Re:React 16 by Shywim on Tuesday September 26, 2017 @01:33PM (#15340827)
Depends what you call idiomatic. I dont think JSX is really a JavaScript idiom, more like a HTML idiom applied to JavaScript which happen to be often used together.*

At the end of the day, I think that calling something idiomatic is subjective and so, varies from people to people.

*: to be clear, my point is many people use JSX with React because it feels idiomatic (I manipulate HTML/DOM, so why not just write with HTML-like syntax?) but it is not idiomatic to JavaScript and I don't think the other React APIs are that nice to use. If I didn't use JSX with React, I'd tend to use other framework because, in my opinion, they make more sense.

Re:React 16 by l1ambda on Tuesday September 26, 2017 @01:35PM (#15340842)
JSX is optional.
Re:React 16 by bpicolo on Tuesday September 26, 2017 @02:40PM (#15341430)
It's optional, and also not optional. Nobody is using React without JSX in practice, because it's ugly and verbose.
Re:React 16 by l1ambda on Tuesday September 26, 2017 @05:58PM (#15342881)
Not true, without JSX, React is basically Mithril, if you alias React.createElement to a short function name.
Re:React 16 by bpicolo on Tuesday September 26, 2017 @06:09PM (#15342972)
Yeah, and I'm arguing that it's pretty ugly to write nested html that way.

Hater-or-lover of JSX, it is definitely an intuitive way to think about HTML in the context of JS.

I prefer the vue model that's a bit closer to the metal, though, if only because of quirks like className

Re:React 16 by l1ambda on Tuesday September 26, 2017 @06:22PM (#15343093)
Think I see what you are getting at--in practice most folks using React are going to use JSX and build tools, and if you alias the function it's kind of non-standard.

Mithril has "class" instead of "className"; that irks me too.

Re:React 16 by oceanswave on Tuesday September 26, 2017 @01:50PM (#15340985)
And vue optionally supports Jsx, so original comment or using it as a reason why ‘react sucks’ is being super pandentic. It’s ok to have multiple frameworks!
Re:React 16 by Touche on Tuesday September 26, 2017 @02:18PM (#15341251)
Optional features contribute to a tool's complexity, especially when every single example assumes you are using said optional feature.
Re:React 16 by cnp on Wednesday September 27, 2017 @01:43AM (#15345197)
And <Foo bar={'hi!'} /> is the same as Foo({ bar: 'hi!' })
Re:React 16 by twfarland on Tuesday September 26, 2017 @12:52PM (#15340413)
Agreed. Pure views are much simpler.
Re:React 16 by bpicolo on Tuesday September 26, 2017 @02:41PM (#15341439)
You can write prop-only, pure views in vue. :)
Re:React 16 by twfarland on Thursday September 28, 2017 @12:47PM (#15358651)
Ignorance revealed :) thanks. What's Vue's idiomatic approach for managing state at the top, outside of all components (like Redux)?
Re:React 16 by corford on Friday October 06, 2017 @04:26PM (#15420155)
Re:React 16 by losvedir on Tuesday September 26, 2017 @08:18PM (#15343836)
Whether Vue or React is a more "complex" I think depends on how in depth you want to understand it. I could see that Vue is less complex to use, at least superficially, but I think it's way harder to understand.

When I look at the guide and I see stuff like this:

    <div id="app-2">
      <span v-bind:title="message">
        Hover your mouse over me for a few seconds
        to see my dynamically bound title!
      </span>
    </div>
I get immediately queasy about what Vue is doing. Does it parse the HTML? How exactly does scoping work? What sort of special classes and expressions can I put in the span, and in what manner will they be evaluated?

In contrast, React is a JS library, and works like any other. JSX is weird for the first minute, but it's a very light transformation to the underlying JS, to the point where when I write it I can mentally see what JS functions I'm invoking, which therefore helps me understand all those things I mentioned before like scoping rules, what this will refer to, etc.

Re:React 16 by stefantheard on Tuesday September 26, 2017 @12:41PM (#15340307)
This has been my experience as well. With react if I need something I can generally find a component someone else has already made that is well supported / decent quality. With Vue I will generally have to roll my own.
Re:React 16 by irrational on Tuesday September 26, 2017 @04:11PM (#15342104)
I haven't looked at React's components (which component library would you recommend?), but so far Vuetify has all the components I've needed.
Re:React 16 by stefantheard on Tuesday September 26, 2017 @04:46PM (#15342357)
I am referencing "component" as a more general term. I think Vue has support for all of the common forms/divs/etc, I was more talking about like if you wanted an extensible calendar implementation or a scalable data table implementation there are probably 10 usable components for each of these examples in React but in Vue it would be harder to find one.
Re:React 16 by irrational on Friday September 29, 2017 @11:53AM (#15366360)
That is exactly what Vuetify provides. There are other component libraries for Vue, but so far Vuetify has all the components I've needed.

https://vuetifyjs.com/

Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @02:42PM (#15341447)
Vue is as easy to learn as Angular was. Saying that Vue is less complex - this line gets thrown around as if anyone would easily agree. It is a traditional templating framework, it ships its own javascript emulator and scripting engine, you re-learn everything. Composition is not natural to it. Every single structure is arbitrary. It has an API documentation that spans 70 pages. The cognitive overhead is large.

If you know plain javascript you know half of what makes react. The API surface usually consists of a single function: render. The rest are 3-4 class lifecycles, setState, a few jsx semantics and that's it. You solve problems in the same way you always solved them, there is nothing to re-learn and you don't bend to the framework.

Go ahead and re-create this in Vue, tell me what you're doing is easier:

    import timestamp from 'time-stamp'
    
    const Header = props => <h1>{props.text}</h1>
    
    const Main = () => <Header text={timestamp()} />
    
    ReactDom.render(<Main />, document.querySelector('#app'))
A beginner could blink at this once and start making simple apps blindfolded. A Vue beginner would be stuck even trying to create components, not to mention compose them, or pass props, or access the import. Every single step on top of this has to be fished out of the documentation: children, conditions, loops, filters, etc.
Re:React 16 by tekkk on Tuesday September 26, 2017 @03:59PM (#15342032)
Oh please. React itself might not be that difficult but thrown in couple overly engineered libraries like react-router and immutable.js and that poor beginner will start feeling a bulging Javascript fatigue in their foreheads.

Once you get rolling both of them are good but it's no easy task to start-up a React project on your own. You need a lot libraries, have to twiddle with immutability which is no piece of cake with JS and be constantly aware of small quirks like keys when looping jsx-elements, className instead of class, how to add css preprocessor, using setState instead of directly assigning to it with the constant farce with deeply nested Object.assigning oh such fun.

React tries to make the world a better place with more theoretical approach while Vue focuses on tried-and-true methods that work and are straight-forward for everyone with a little experience in programming. (v-if might not be pretty but it beats JSX conditional) Granted modern frontend development has a lot of different things to be aware of that make it bit difficult for beginners but IMO Vue makes it a lot more simpler and productive. Some things I wish might be better like the ecosystem but oh well. Overall I'm happier and the only problem is having to fight off overly smug React-developers who have rubbed their egos so hard that they aren't able to even think about better solutions anymore.

Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @04:19PM (#15342169)
immutable.js for what? Seems to me you're picking up hear-say here and there but why and for what would you want to use immutable. Even redux docs speak out against it. It's just a random tool like any other, you're assuming it has some deeper significance with react, it doesn't.

> be constantly aware of small quirks like keys when looping

There are no "quirks" in looping anything. It is plain javascript. I would call "v-for" a quirk on the other hand.

    const array = []
    for (let item of items)
        array.push(<li>{item.text}</li>)
    
    render (
        <ul>
            {array}
        </ul>
    )
Recreate the snippet above, then let's discuss.
Re:React 16 by mikewhy on Tuesday September 26, 2017 @05:18PM (#15342602)
Doesn't that produce the "array items should have key prop" message?

Also you can use `items.map` in your example.

Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @05:28PM (#15342678)
I only wanted to show that react doesn't specify a programming style. He said javascript maps are "quirky." Maps are fine but so are plain loops. Ternaries are fine, so are plain if-then-else constructs if someone would like it better that way.

The example would run without keys, it's merely for demonstration. You'd need keys in Vue as well.

Re:React 16 by mplewis on Tuesday September 26, 2017 @03:29PM (#15341776)
Vue supports JSX just fine. It also simplifies many things when compared to React:

• lifecycle method names: mounted vs componentDidMount

• proptypes: builtin vs `import PropTypes from 'prop-types'`

• component creation: basic JS object vs ES6 class extending `React.component`

Please don't spread misinformation because you prefer one way of writing frontend apps to another. React is better at complex apps, and Vue has a simpler API that many find easier to memorize.

It's rude to insult other commenters by saying "A beginner could blink at this once and start making simple apps blindfolded." I think you're being hyperbolic, but it comes off as condescending.

Frontend is hard. No one "blinks at this once" and learns how to build component-based layouts with view, data, and logic. Please be nice.

Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @04:14PM (#15342134)
Why don't you actually recreate the snippet of code up there. The same arguments won't win you a price, and i don't agree with them for all the reasons i've stated. Show me how Vue handles the situation up there in such an easy way please, then we would have something to discuss.

> Frontend is hard. No one "blinks at this once" and learns how to build component-based layouts with view, data, and logic. Please be nice.

You seem to purposely misunderstand me. I never said someone could learn react by looking at it. I said someone could understand the nature of simple composition by looking at it.

I learned Vue fully in maybe a few weeks. React in an hour here: egghead.io/courses/react-fundamentals If you think that studying a 70 page document in order to carry out basics like composition is easy then so be it. If you'd actually dare to post the example in Vue, we'd all see how "easy" the hoops would be you'd have to jump through to realize it.

Re:React 16 by corford on Friday October 06, 2017 @05:42PM (#15420692)
>Why don't you actually recreate the snippet of code up there.

I've never coded in React or Vue but after spending 15 mins reading https://vuejs.org/v2/guide/render-function.html here's a pure JS re-creation in Vue for you (fiddle here: https://jsfiddle.net/0wr6xskh/):

  <div id="app"></div>

  const MyHeader = Vue.component('MyHeader', {
    render: function (createElement) {
      return createElement('h1', this.text)
    },
    props: {
      text: {
        type: String,
        required: true
      }
    }
  });

  new Vue({
    el: '#app',
    render: function (createElement) {
      return createElement('div',[
        createElement(MyHeader, {
          props: {
            text: ''+new Date()
          }
        })
      ])}
  });
The above could be expressed more succinctly in JSX (I just can't be bothered reading up on the syntax since, as mentioned, I've never written anything in it and consequently don't know it). More info on Vue's JSX support here: https://vuejs.org/v2/guide/render-function.html#JSX
Re:React 16 by overcast on Wednesday September 27, 2017 @08:39AM (#15347145)
Why are you being so confrontational? Seriously. We're discussing web frameworks. This isn't needed on HN, or anywhere. I come here to avoid all the negativity on the web. You enjoy React, we get it. Relax.
Re:React 16 by aboodman on Tuesday September 26, 2017 @04:32PM (#15342255)
I think the argument could be even more compelling without the es6-isms:

  function Header(props) {
    return <h1>{props.text}</h1>;
  }

  function Main() {
    return <Header text={new Date()}/>;
  }

  ReactDom.render(<Main />, document.querySelector('#app'))
Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @04:45PM (#15342347)
Good call. Although the timestamp would have been impossible in Vue since templates don't have scope, they couldn't access imports. One would have to jump through another hoop and inject/duplicate the function into a template method.
Re:React 16 by irrational on Tuesday September 26, 2017 @04:01PM (#15342047)
"A beginner could blink at this once and start making simple apps blindfolded." Um... I've been doing web development for decades and I don't have a clue what those lines of code are doing.
Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @04:13PM (#15342113)
> I've been doing web development for decades and I don't have a clue what those lines of code are doing.

I don't think that's reacts fault? http://exploringjs.com/es6/index.html#toc_ch_first-steps

Other than the es6 syntax, would you like to specify what it is that you don't understand? If you look at it, it must occur to you that react components are functions that can receive properties and return markup. Now you can compose these functions. Just like in Vue or any other framework there is a single mounting point. If you understand this, you know the largest part of the react library.

Re:React 16 by irrational on Tuesday September 26, 2017 @05:14PM (#15342576)
I'm not the one who said that a beginner could blink at it and understand how to build React apps.
Re:React 16 by mlsarecmg on Tuesday September 26, 2017 @05:19PM (#15342616)
I never said you know react by looking at it. But you know it good enough to build a simple composition. If i asked you to create another component up there that contains a span, are you seriously saying you wouldn't be able to do it after having looked at it?

    const Foo = () => <span>hey</span>
or, same thing in es5

    function Foo() {
        return <span>hey</span>
    }
?

And if i asked you to use this component in another, even if you saw how it's done, you would absolutely not be able to pull it off again?

    function Bar() {
        return <Foo />
    }
?

To be honest, i thought i didn't like react as well when i first encountered it. I didn't actually try to understand, the appearance of it seemed so radically different that i refused to think of it as simple. But i eventually tried and figured that there is actually nothing behind this framework. These are plain functions, or classes with lifecycles. I was wrong in my assumptions.

Re:React 16 by hesarenu on Tuesday September 26, 2017 @01:49PM (#15340977)
For a js developer Reactjs is far easier to pick rather then learning vue. Reactjs has few life cycle to learn rest is just javascript.
Re:React 16 by ng12 on Tuesday September 26, 2017 @01:50PM (#15340986)
I think this is a misleading answer. It only appears that way because the React ecosystem is much bigger and tailored to more complex applications. Comparing the Vue library to the React library I find it hard to recommend one over the other -- at the end of the day they're pretty similar.