5 ms·
The first problem here is putting a UI widget in charge of fetching data. React was originally designed to be the V in MVC. Had we left it as the V in MVC we'd
by breadwinner 2y ago
The first problem here is putting a UI widget in charge of fetching data. React was originally designed to be the V in MVC. Had we left it as the V in MVC we'd be loading data in controllers, like we do in every other framework. Having a React component be the model, view and controller is a mistake, and we can still reverse course.
- 0xblinq 2y agoThat’s why I think the most sane way to use React (or Vue) nowadays is through Inertia.js. Have a proper backend doing all the backend stuff and just render page components as if they where just the views of the framework. All this server components nonsense is solving a problem that maybe Facebook has but almost no one else does. But people think they do, so a lot of complexity is added for no real reason.
- diob 2y agoI've never seen a MVC codebase that wasn't a nightmare to work in.
- sky2224 2y agoYeah, MVC (and MVVM for that matter), seem like architectural approaches that are great in theory, but with the reality of constraints, requirements, timelines, and ultimately many engineers' misunderstanding of things (frankly I'm probably included in that group as well), it just leads to a mess of interdependency and tight coupling among functionalities. Now granted, this is pretty much a given for any architecture (nothing is perfect): so maybe my expectations of what things should be needs to be reeled in a bit.
- breadwinner 2y ago> it just leads to a mess of interdependency and tight coupling among functionalities Disagree with that. Most UI frameworks, including ASP.NET Core, JSP and JSF (Java based frameworks), Ruby on Rails, and Django (Python) are all based on MVC. That's no accident. MVC works very well.
- sky2224 2y agoReally? I'll admit most my experience has first been in an ASP.NET 4.x environment and currently in WPF MVVM. It's been a mess. Maybe I've just had bad luck seeing these architectures in action?
- perrylaj 2y agoGoing to assume you're talking frontend? Otherwise you'd be claiming most Spring, Django, Rails, Angular, <enter common backend framework> codebases are a nightmare to work in. While there are many good application architectures that don't fit into the MVC pattern (or introduce additional layers, e.g. - auth), separating DB ops (M) from business logic (C) and endpoint handlers (V) has always been rather maintainable/testable in my experience.
- randomdata 2y ago> React was originally designed to be the V in MVC. React wasn't designed to fit in the MVC model. However, if we are trying to draw an analogy, as far as I can see it most closely resembles the controller. It is where the events are handled to update the "model" (state), which are propagated to the "view" (DOM element). What makes you say V?
- breadwinner 2y ago"Just the UI: Lots of people use React as the V in MVC. Since React makes no assumptions about the rest of your technology stack, it's easy to try it out on a small feature in an existing project." Source: https://github.com/facebook/react/tree/015833e5942ce55cf31aefd0a5c2be8a65ec2daa https://github.com/facebook/react/tree/015833e5942ce55cf31ae... React is good at V, it is not good at M or C.
- randomdata 2y ago> React is good at V How so? Under MVC, V is the visual representation of the model. React does not exist there at all. It relies on the DOM and associated technologies to provide that. React does give a mechanism to keep the visual representation in sync with the data and it provides a place to handle events that update the data. While it is not designed for the MVC model, so we cannot truly speak to it in MVC terms, the closest analog to those seem to be the M and C. I'm assuming you had to go back to a commit from 8 years ago because all future commits realized that whoever wrote that React is the V in MVC was confused?
- breadwinner 2y ago> V is the visual representation of the model. React does not exist there at all. Disagree. That's where React exists. Whether you specify V using turtle graphics style API, or DOM style markup, it is all still V.
- randomdata 2y agoConsider the React function: function Hello() { return <div>Hello</div> } The div object is where the visual representation is handled. React in this case is only concerned with passing data to it, which is explicitly the model's concern under MVC. Although I suggest that event handling is really why people choose React, and that is the controller's concern according to MVC. Again, React isn't designed for the MVC model, so we have to really stretch ourselves to find any kind of similarities. But if React was only the V to the greatest extent that we can pervert the meaning of V, what value does it add?
- notpachet 2y agoSome of us are still shipping Redux apps with React as the V and life is good.
- gr__or 2y agoCaleesi voice: React wasn’t invented to stop the wheel of MVC, it was invented to break the wheel And I think life is better without the V-C distinction. Models ofc still exist but the field has gotten more fine grained for the term to still cary meaning
- k1w1 2y ago> React was originally designed to be the V in MVC. So much this. As we built more sophisticated apps using React we were constantly frustrated with how much code was ending up in the views, and how difficult controller frameworks were to work with (looking at you Redux). So we built our own mini-framework that explicitly separates the view from the controller. Seems like a simply change but it is amazing how much more productive it makes developers, especially with large complex applications that need refactoring as they evolve. Unfortunately our skills are in writing code, not marketing, so we don't have a fancy website like most frameworks. But the details are here: https://github.com/aha-app/mvc https://github.com/aha-app/mvc
- willsmith72 2y agoYou missed the point. React is not MVC, and that's by design. Certainly redux isn't a controller.