HIGHER ORDER FUNCTIONS
DECORATORS
HIGER ORDER COMPONENTS
First off,
WTF is a higher order function?
Simply a function that takes in OR returns another function
What are the benefits of having a function take in another function?
function findOdds(arr){
let temp = []
for(let i = 0; i < arr.length; i++){
if (arr[i] % 2 !== 0) temp.push(arr[i])
}
return temp
}
findOdds([1,2,3,4]) // [1, 3]
function findNamesLongerThanFive(arr){
let temp = []
for(let i = 0; i < arr.length; i++){
if (arr[i].length > 5) temp.push(arr[i])
}
return temp
}
findNamesLongerThanFive(['Bryan', 'Charlotte', 'Lindsey', 'June']) // ['Charlotte', 'Lindsey']
A lot of shared code between the two
That is why we have things like .map, .filter & .reduce
(along with a bunch of others)
They take in functions as parameters
Now, WTF is a decorator?
Is this a decorator?
Are these decorators?
Is this a decorator?
@doSomething
For the love of everything holy, Bryan...Yes these are all "decorators"
- You
Decorators
Are literally a way to "decorate" your javascript code with some sort of functionality.
Decorators are currently a stage 2 proposal from TC39...
TC39
A group of nerds like you and me that decide what ECMAscript will look like. Proposals are made and go through several different stages.
- Stage 0: Strawman - Seeking input on the proposal
- Stage 1: Proposal - Define the why and challenges from adding proposal
- Stage 2: Draft - Define a specific syntax for proposal
- Stage 3: Candidate - Refine proposal
- Stage 4: Finished - Ready for the next release of ECMA
function readOnly(target, name, descriptor){
descriptor.writable = false
return descriptor
}
Example
- target - The class we are looking to manipulate
- name - The property the decorator is modifying
- descriptor - The property description
Example
To find out what properties are available, we conveniently can use Object.getOwnPropertyDescriptor
const me = {
name: 'Bryan',
age: 29,
tattoos: true,
family: ['Lindsey', 'Coco', 'June']
}
Object.getOwnPropertyDescriptors(me)
function readOnly(target, name, descriptor){
descriptor.writable = false
return descriptor
}
class User {
constructor(name) {
this.name = name;
}
@readOnly
greet() {
return this.name + ' says hello'
}
}
Example Usage
So what?
This makes it so no one can come in and hug stuff up like this:
User.prototype.greet = function(){
return this.user = " loves to rollerblade"
}
HIGHER ORDER COMPONENTS
HOC
A technique that allows us to share component logic.
Simply put, a function that takes in a Component as a parameter and returns a new Component
Context
Context is a solid option for sharing data between X layers of Components
deck
By bryansmith33
deck
- 332