Skip to content

Instantly share code, notes, and snippets.

View aneurysmjs's full-sized avatar
💭
асинхорнный

Аневризма aneurysmjs

💭
асинхорнный
View GitHub Profile
@aneurysmjs
aneurysmjs / regexes.ts
Last active November 8, 2019 14:39
regexes tricks
/**
* match first character after white space
*/
const firstAtWhiteSpace = /(^|\s)[a-z]/g;
@aneurysmjs
aneurysmjs / store.js
Last active November 5, 2019 13:39
redux stuff
// in this case the state is each individual product
const product = (state, action) => {
switch (action.type) {
case 'CREATE_PRODUCT':
return {
id: action.id,
name: action.name,
price: action.price,
};
case 'EDIT_PRODUCT':
@aneurysmjs
aneurysmjs / index.html
Last active October 29, 2019 08:58
CSS stuff
<!--
even though the "blue" comes later in the list of classes,
but CSS rules of precedence actually depends of the order of
classes in the stylesheet
-->
<span class="red blue">
so I'm red
</span>
@aneurysmjs
aneurysmjs / useErrorHook.tsx
Last active October 21, 2019 21:05
handle promise exceptions inside a hook
/**
* @link this is taken from here for reference
* https://github.com/testing-library/react-hooks-testing-library/issues/20#issuecomment-476628600
*/
import { useState, useEffect } from 'react';
import { renderHook } from '@testing-library/react-hooks';
describe('error hook tests', () => {
function useError(obj: Error | string): boolean {
if (obj.constructor.name === 'Error') {
@aneurysmjs
aneurysmjs / bundle.js
Last active October 17, 2019 09:20
bundle-tricks
// .babelrc
{
"presets": [
[
"@babel/preset-env",
{
// this tells @babel "hey, don'y change any of the modules, let Webpack handle it
"modules": false
// you only get the individual pollyfill that you need
"useBuiltIns": "usage"
@aneurysmjs
aneurysmjs / types-vs-interface.ts
Created October 15, 2019 17:10
types vs interfaces
interface Base {
id: string;
timestamp: string;
}
interface Product extends Base {
price: number;
stock: number;
}
@aneurysmjs
aneurysmjs / reducers-performance.js
Last active October 8, 2019 12:55
benchmarking each type of reducer
const { PerformanceObserver, performance } = require('perf_hooks');
const obs = new PerformanceObserver((items) => {
console.log(items.getEntries()[0]);
performance.clearMarks();
});
obs.observe({ entryTypes: ['measure'] });
const has = Object.prototype.hasOwnProperty;
@aneurysmjs
aneurysmjs / connect.js
Created September 30, 2019 11:33
Simplified version of react-redux's connect HOC
const connect = (mapStateToProps) => (Component) => {
return class Connect extends React.Component {
state = mapStateToProps(store.getState());
componentDidMount() {
// когда store меняется, обновит компонент
this.unsubscribe = store.subscribe(this.update);
}
componentWillUnmount() {
@aneurysmjs
aneurysmjs / proto-tricks.js
Last active September 30, 2019 08:06
couple of tricks about prototypal inheritance
/**
* understanding .constructor property
*/
function User() {
}
// when functions are created, they're given a "prototype" property which is an object
console.log(User.prototype); // {}
@aneurysmjs
aneurysmjs / filtering-ramda.js
Created April 19, 2018 16:32
filtering nested array of obejct using Ramda.js
const data = [
{username: 'bob', age: 30, tags: ['work', 'boring']},
{username: 'jim', age: 25, tags: ['home', 'fun']},
{username: 'jane', age: 30, tags: ['vacation', 'fun']}
];
R.filter(R.where({tags: R.contains('fun')}))(data);
const users = [
{username: 'bob', age: 30, tags: [{label: 'work'}, {label: 'boring'}]},