I don't think this has to be true. If you think of a framework as a piece of code that calls you where you sort of supply it with configuration you could do that when writing vanilla js but you don't have to.
When I write vanilla js I don't have a seperate file called framework.js. There is very little code needed to manage state. Almost all functions in my codebase are doing concrete things.
I mean in a complex enough application you'll have to come up with some abstractions that will make you life easier anyway. I doubt that you will manually add and remove classes, or add and remove nodes via direct DOM API calls every time you need to do that. You know what I mean? A set of such abstractions is what I call a framework. It doesn't have to be a separate file called "framework.js". It may even be more of a library than a framework. But I believe you will inevitably come to that to centralize certain things and make them easier to do.
I do use abstractions to make my life easier. The main abstraction is a function called tag:
const tag = (tagName, props, ...children) => {
const el = document.createElement(tagName)
for(let k in props) el.setAttribute(k, props[k])
for(let child of children)
el.appendChild(typeof child == 'string'? document.createTextNode(child) : child)
return el
}
This makes the construction of new elments a bit more concise. The rest is just functions, manually adding or removing classes and adding or removing nodes via the direct DOM API.
The main advantage I think React brought is breaking the concept of "separation of concerns" (keeping css, html and js in different files even when they change together). Keeping stuff that belongs together in the same file and mostly pure is what gives the most benefit. You don't need complicated frameworks for that.
const createSpecialButton = text => tag("button", {style: "background: purple"}, text)
When something becomes a framework is a bit blurry. I consider this more of an utility function. It is only 7 lines long. You call it, it does not call you. It gives you back a concrete element, not some abstract intermediate value. It is completely optional. The amount of these utilities you need in a big project is still tiny.
I wrote a figma clone (see other comment) with couple of these utility functions. It looks a lot like a regular react project really. Mostly functions (which you might call a component if they return HTML), mostly pure or local state.
We have encountered that problem too. As far as I learnt from various sources that is caused by circular imports in some cases, and by using index files that re-export your modules in other.
Actually I don't think that Google makes any money from YT in Russia because they disabled ads for Russian users altogether about 2 years ago, and there's no easy way to pay for a premium subscription in Russia since SWIFT stopped working, unless there're other ways it can make money other than those two. And it's very good that they still keep working in Russia anyway, because it provides a platform for alternative views and opinions. As a Russian, I'm really glad we still have YT and surprised it hasn't been blocked.
And yes, we will run DOOM on this hardware at some point, but projects such as these take a long time to create! After all, we are only 3 people working on this in our free time. Have patience until then :)
How this typically plays out, AFAIK, is that the interviewee's brother would be the second oldest person in the area. In a town behind the hill, there lives the oldest person in the region - a woman that's over 100 years old. Her secret? The place doesn't do birth certificates, and she took over the identity of her mother once the latter passed away.
reply