Skip to content

Instantly share code, notes, and snippets.

View ctsin's full-sized avatar
💭
雄关漫道真如铁,而今迈步从头越。

邢贵志 ctsin

💭
雄关漫道真如铁,而今迈步从头越。
  • EPAM
  • 深圳
  • 12:51 (UTC +08:00)
View GitHub Profile
@ctsin
ctsin / node-typescript-esm.md
Created November 27, 2023 01:26 — forked from khalidx/node-typescript-esm.md
A Node + TypeScript + ts-node + ESM experience that works.

The experience of using Node.JS with TypeScript, ts-node, and ESM is horrible.

There are countless guides of how to integrate them, but none of them seem to work.

Here's what worked for me.

Just add the following files and run npm run dev. You'll be good to go!

package.json

@ctsin
ctsin / little-vdom-decompiled.js
Created March 9, 2020 08:06 — forked from marvinhagemeister/little-vdom-decompiled.js
Jason little-vdom decompiled
/* eslint-disable no-unused-vars */
/* eslint-disable no-else-return */
// JSX constructor, similar to createElement()
export const h = (type, props, ...children) => {
return {
type,
// Props will be an object for components and DOM nodes, but a string for
// text nodes
props,
export const h=(t,p,...c)=>({t,p,c,k:p&&p.key})
export const render=(e,d,t=d.t||(d.t={}),p,r,c)=>
// arrays
e.pop?e.map((e,p)=>render(e,d,t.o&&t.o[p])):
// components
e.t.call?(e.i=render((render.c=e).t({children:e.c,...e.p},e.s=t.s||{},t=>
render(Object.assign(e.s,t)&&e,d,e)),t.i||d,t&&t.i||{}),e):(
// create notes
e.d=t.d||(e.t?document.createElement(e.t):new Text(e.p)),
// diff props
@ctsin
ctsin / create-reducer-context.js
Created May 9, 2019 02:08 — forked from kentcdodds/create-reducer-context.js
Just some fun idea I had and don't want to lose.
// src/count-context.js
import React from 'react'
function countReducer(count, action) {
const {step = 1} = action
switch (action.type) {
case 'INCREMENT': {
return count + step
}
default: {
import * as React from 'react';
enum ActionType {
Increment = 'increment',
Decrement = 'decrement',
}
interface IState {
count: number;
}
@ctsin
ctsin / foo.tsx
Created March 1, 2019 11:39 — forked from OliverJAsh/foo.tsx
TypeScript React HOC using `forwardRef`
import * as React from 'react';
import { Component, ComponentClass, createRef, forwardRef, Ref } from 'react';
const myHoc = <ComposedComponentProps extends {}>(
ComposedComponent: ComponentClass<ComposedComponentProps>,
) => {
type ComposedComponentInstance = InstanceType<typeof ComposedComponent>;
type WrapperComponentProps = ComposedComponentProps & {
wrapperComponentProp: number;
@ctsin
ctsin / ReactHooksToggler.jsx
Last active January 22, 2019 07:10 — forked from itaditya/ReactHooksToggler.jsx
自定义钩子样例
function useToggle(initialValue) {
const [toggleValue, setToggleValue] = useState(initialValue);
const toggler = useCallback(() => setToggleValue(!toggleValue));
return [toggleValue, toggler];
}
function EditableItem({ label, initialValue }) {
const [value, setValue] = useState(initialValue);
const [editorVisible, toggleEditorVisible] = useToggle(false);
import React, { Component } from 'react';
import './App.css';
import TextInput from './TextInput';
import validate from './validate';
import TextArea from './TextArea';
import Email from './Email';
import Select from './Select';
import Radio from './Radio';
@ctsin
ctsin / pseudo_elements.md
Created September 25, 2017 06:06 — forked from p3t3r67x0/pseudo_elements.md
A CSS pseudo-element is used to style specified parts of an element. In some cases you can style native HTML controls with vendor specific pseudo-elements. Here you will find an list of cross browser specific pseudo-element selectors.

Styling native elements

Native HTML controls are a challenge to style. You can style any element in the web platform that uses Shadow DOM with a pseudo element ::pseudo-element or the /deep/ path selector.

video::webkit-media-controls-timeline {
  background-color: lime;
}

video /deep/ input[type=range] {