This content moved here: https://exploringjs.com/impatient-js/ch_arrays.html#quickref-arrays
import React from 'react'; | |
import PropTypes from 'prop-types' | |
import debounce from 'lodash.debounce' // or whatevs | |
import isEqual from 'lodash.isEqual' | |
class AutoSave extends React.Component { | |
static contextTypes = { | |
formik: PropTypes.object | |
} |
import React from 'react'; | |
class ReducerComponent extends React.Component { | |
constructor(props) { | |
super(props); | |
} | |
reducer = (state, action) => state; | |
dispatch = action => this.setState(state => this.reducer(state, action)); |
const trackTime = timing => { | |
const now = performance.now(); | |
if (!timing.startTime) timing.startTime = now; | |
const elapsed = now - timing.startTime; | |
const {duration} = timing; | |
if (duration != null && duration <= elapsed) timing.startTime = null; | |
return elapsed; | |
}; | |
const delay = (callback, duration) => { |
"use strict"; | |
// animation utils | |
// =============== | |
const trackTime = id => { | |
const [entry] = performance.getEntriesByName(id); | |
if (!entry) { | |
performance.mark(id); |
const MongoClient = require('mongodb').MongoClient | |
const express = require('express') | |
const multer = require('multer') | |
const bodyParser = require('body-parser') | |
const upload = multer({ dest: 'uploads/' }) | |
const router = express.Router() | |
const app = express() | |
app.use(bodyParser.json()) |
const webpack = require('webpack'); | |
require('dotenv').config({ | |
path: process.env.NODE_ENV === 'production' ? '.env.production' : '.env' | |
}); | |
module.exports = { | |
webpack: config => { | |
const env = Object.keys(process.env).reduce((acc, curr) => { | |
acc[`process.env.${curr}`] = JSON.stringify(process.env[curr]); |
String.prototype.parseTransform = function() { | |
var prop = ['translate', 'matrix', 'rotate', 'skewX', 'skewY', 'scale']; | |
var val = this.match(/(translate|matrix|rotate|skewX|skewY|scale)\(.*?\)/g); | |
var obj = {}; | |
if (val) { | |
for (var i = 0, length = val.length; i < length; i++) { | |
var item = val[i]; | |
var index = item.indexOf('('); | |
var v = item.substring(index + 1, item.length - 1).split(/\,|\s/); | |
var n = item.substring(0, index); |
Notes for a presentation by Amelia Bellamy-Royds
SVG Summit, 15 February 2017
I've set up a CodePen as a scratchpad for the live-coding bits. Don't expect anything there to stay there long; fork the pen if you want to save the code & look at it later.
https://gist.github.com/ljharb/58faf1cfcb4e6808f74aae4ef7944cff
While attempting to explain JavaScript's reduce
method on arrays, conceptually, I came up with the following - hopefully it's helpful; happy to tweak it if anyone has suggestions.
JavaScript Arrays have lots of built in methods on their prototype. Some of them mutate - ie, they change the underlying array in-place. Luckily, most of them do not - they instead return an entirely distinct array. Since arrays are conceptually a contiguous list of items, it helps code clarity and maintainability a lot to be able to operate on them in a "functional" way. (I'll also insist on referring to an array as a "list" - although in some languages, List
is a native data type, in JS and this post, I'm referring to the concept. Everywhere I use the word "list" you can assume I'm talking about a JS Array) This means, to perform a single operation on the list as a whole ("atomically"), and to return a new list - thus making it mu