Its not a bad thing when 95% of the code in your project is borrowed (i.e. when you use a framework), but ducktaping stuff together will only get you so far.
For the size of the example project (single dev, one day, single page) and the requirements (load as fast as possible) this would be the superior approach. React would indeed be overkill. And below 200ms load times has proven impact on conversions. That is: the requirement is realistic and commercially, if at all possible, not at all negotiable.
Yes, it's ES6/ES2015. It's a lambda function ("fat arrow notation"). In the parentheses you would specify the arguments. An empty pair of parentheses means that the function does not expect any parameters.
To add to the other explanations: it's also important to point out that arrow functions are slightly different from regular functions in that they don't redefine `arguments` and `this` so these keywords behave like any other variable would in a closure.
So it's not just a syntactic shorthand but there's also a semantic difference.
It Uses "fat arrow" functions (lambdas) to define function. It is "equivalent" (there are several differences here, like "const" and the context of the function) to:
var h1 = function() {
return makeElement(`h1`);
}
Edited to reflect the valid point brought up in the comments
Not really an equivalent, because "this" would be different - unlike with function(){}, there is no automatic this-context binding with arrows, so just switching to a fancier syntax in existing code may break things.
Also, no "arguments" (there are ...rest parameters that allow for variadic functions).
Interesting read, although the shtick got a bit old near the end. I really wonder how this compares to inferno.js as that has some real optimisation magic to make it super small and super fast while also being, close to, compatible with React.
This is a very sane exercice to do, while obviously not something to recommend for production code - but I guess it's not the point.
We often take our tools for granted, without thinking about how they were designed. Doing such exercice allows both to get insights into the possible solutions for a problem one of our tools solves (allowing us to understand our tools better), and also is proper training for architecturing our own tools.
And thanks for presenting it as an exploration and not the, "I am a real carpenter, so I don't use a hammer, I just pound in nails with my dick!" inanity a lot of these articles are.
Creating frameworks by reversing the works of others is something I'd call art. I really enjoyed your article, and I'll surely use some of it for a personal framework that I'm currently writing.
Correct. Self made framework is a good thing for pet projects and in terms of education. But if you work in a team on the long-term project it's better to use standard tools since there will be a need to expand the team and it's better new members are already aware of the used tools/frameworks.
At the end of the article the author admits that while this is a worthy exercise and might sometimes be useful, using a framework such as react does have a lot of benefits.
29 comments
[ 3.2 ms ] story [ 84.4 ms ] threadIts not a bad thing when 95% of the code in your project is borrowed (i.e. when you use a framework), but ducktaping stuff together will only get you so far.
For the size of the example project (single dev, one day, single page) and the requirements (load as fast as possible) this would be the superior approach. React would indeed be overkill. And below 200ms load times has proven impact on conversions. That is: the requirement is realistic and commercially, if at all possible, not at all negotiable.
A fun read as well.
after this declaration you can write
insteadjust a shortcut function
They also have an implicit return if you don't use {}
So it's not just a syntactic shorthand but there's also a semantic difference.
Also, no "arguments" (there are ...rest parameters that allow for variadic functions).
I thought the arrows were now binding to surrounding context? (e.g. https://babeljs.io/blog/2015/06/07/react-on-es6-plus)
We often take our tools for granted, without thinking about how they were designed. Doing such exercice allows both to get insights into the possible solutions for a problem one of our tools solves (allowing us to understand our tools better), and also is proper training for architecturing our own tools.
Thanks for sharing your discoveries.
Great work.
It's a little old now, but still worth a read.
https://teropa.info/build-your-own-angular/