Comment by davnicwil

Comment by davnicwil 3 hours ago

13 replies

these things are hard, maybe impossible to define.

For example I mostly agree with your calls/called definition but you also get self-described libraries like React giving you defined structure and hooks that call your code.

vbezhenar 3 hours ago

React is 100% framework. They even bring their own DSL. It's absurd to call React library.

Library is something that can be pulled off project and replaced with something else. There's no non-trivial project where replacing React with anything would be possible. Every React web app is built around React.

  • mablopoule 2 hours ago

    100% this. To this day the official website still describe itself as a library, and I'm convinced it's completely for marketing reasons, since 'framework' feels heavy and bloated, like Angular or Java Spring, while 'library' feels fast and lightweight, putting you in control.

    Framework can be more or less modular, Angular or Ember choose to be 'battery included', while React choose to be more modular, which is simply choosing the other end of the spectrum on the convenience-versus-flexibility tradeoff.

    React ostensibly only care about rendering, but in a way that force you to structure your whole data flow and routing according to its rules (lifecycle events or the 'rules of hooks', avoiding mutating data structures); No matter what they say on the official website, that's 100% framework territory.

    Lodash or Moment.js, those are actual bona fide libraries, and nobody ever asked whether to use Vue, Angular or Moment.js, or what version of moment-js-router they should use.

  • davnicwil 2 hours ago

    I think absurd is a bit strong. It'd be absurd to call something like rails a library.

    I think you can probably see that distinction already, but to spell it out React is described as a library precisely because it does just one thing - the view - and leaves it to you to figure out the entirety of the rest of the stack / structure of your app.

    Framework, at least to me, but I also believe commonly, means something that lets you build a full application end to end using it.

    You can't do that with React unless your app is just something that lives in the browser either in-memory or with some localstorage backing or something. If that's your app, then probably I'd agree React is your framework per se, but that's hardly ever the case.

    By the way, back to my original point, I still do think these things are impossible to define and in lots of ways these terms don't matter - if it's a framework for you, it's a framework - but I just had to defend my position since you described it as absurd :-)

  • nicoburns 3 hours ago

    Most people don't but you absolutely can use React a library. When React was very new, it was popular to use it as a view layer with backbone.js. In that usage, it's essentially a sophisticated templating library.

iTokio 3 hours ago

That’s because React started as a small, focused library and evolved as even more than a framework, a whole ecosystem, complete with its own best practices

  • davnicwil 3 hours ago

    I don't agree. What I said about React providing structure and (lifecyle) hooks was true from the first version.

    The later stuff adds other ways of doing the same thing but a library it remains.

    That's as self described by the React team, and I think the consensus more broadly.

  • simonw 3 hours ago

    A hill I will die on is that React is a framework.

    • jodrellblank 2 hours ago

      React's homepage says "The library for" and "Go full-stack with a framework. React is a library. It lets you put components together, but it doesn’t prescribe how to do routing and data fetching. To build an entire app with React, we recommend a full-stack React framework like Next.js or React Router." and "React is also an architecture. Frameworks that implement it let you..."

      React's Wikipedia page says "React ... is a free and open-source front-end JavaScript library", and has no mention of Framework.

      Why die on a hill that it "is" something it says it isn't?

      [] https://react.dev/

      [] https://en.wikipedia.org/wiki/React_(software)

      • mablopoule 2 hours ago

        > Why die on a hill that it "is" something it says it isn't?

        There's plenty of guru who say that they are the reincarnation of Jesus and/or Buddha, doesn't mean that we have to take their word for it.

        In the same vein, North Korea is officially the "Democratic People's Republic of Korea", even though it's obviously not a democracy.

      • simonw an hour ago

        > Why die on a hill that it "is" something it says it isn't?

        Because I think they're wrong about that.

        If you'd prefer a different metaphor this is windmill I will tilt at.

        To provide a little more of a rationale: React code calls the code I write - the JSX and the handlers and suchlike.

        It's also pretty uncommon to see React used at the same time as other non-React libraries that handle UI stuff.

        Most importantly, the culture and ecosystem of React is one of a framework. You chose React at the start of a project and it then affects everything else you build afterwards.

        • davnicwil 2 minutes ago

          It's super interesting that you have this definition given your authorship of django (I mean, actually interesting, not 'interesting' :-)

          In another comment I used the example of rails as a kind of canonical 'framework' that can potentially do everything for you full stack, and django is in the same category, juxtaposed against something like React that cannot.

          To that, I think your last paragraph is the one I agree with most closely. It's true, but only for the view part of the app, right? I think that's where I get stuck on stretching to calling it a framework.

          I guess I can see it if you're defining your view/client as a separate logical entity from the rest of the stack. Which is totally reasonable. But I guess just not how I think about it.

      • threatofrain 26 minutes ago

        The ecosystem is starting to move to the term metaframework to describe nextjs or tanstack.

      • iammrpayments an hour ago

        The meta about us page also says it is a privacy first company.