Skip to content

Instantly share code, notes, and snippets.

// 简单的顺序队列,只能添加和迭代,并且只能支持五位数以内,数组的长度最好不要超过四位数
// 利用的是js的对象,如果key是正整数,那么在添加时可以保持大小顺序
class SimpleJSPriorityArray {
constructor() {
this.valcountmap = {}
this.posmap = {}
this.negmap = {}
this.size = 0
}
get length() {
@lovetingyuan
lovetingyuan / remove-twitter-ad.user.js
Created January 30, 2024 17:46
Remove twitter ad in browser with tampermonkey
const style = document.createElement('style')
style.textContent = `
div[data-testid="cellInnerDiv"]:has(path[d="M19.498 3h-15c-1.381 0-2.5 1.12-2.5 2.5v13c0 1.38 1.119 2.5 2.5 2.5h15c1.381 0 2.5-1.12 2.5-2.5v-13c0-1.38-1.119-2.5-2.5-2.5zm-3.502 12h-2v-3.59l-5.293 5.3-1.414-1.42L12.581 10H8.996V8h7v7z"]) {
display: none!important;
}
`
document.head.appendChild(style)
// 当你在react hook中想读取或者设置某个值但是并不关心它们的变化时,可以使用下面的hook
export function useGetState(data) {
const [val, setVal] = React.useState(data);
const currentValRef = React.useRef(val);
currentValRef.current = val;
return React.useCallback((...args) => {
if (args.length) {
setVal(args[0]);
} else {
@lovetingyuan
lovetingyuan / my-context.ts
Last active September 25, 2023 11:52
optimized react context
/**
* 优化过的context,可以单独读写每个属性而不会引起全量的重渲染
* (没有适配devtool,会报错)
*/
import React from 'react';
export function useMyContext<
T extends {
contexts: {
[k: string]: React.Context<{ atom: StateFunc<any> }>;
@lovetingyuan
lovetingyuan / simple-unstated-next.ts
Last active December 25, 2020 09:49
simple unstated next, useContext to manage state
import React from 'react'
interface ContainerProviderProps<State = void> {
initialState?: State
children: React.ReactNode
}
const usecontext = React.useContext
export default function createContainer<Value, State = void>(
@lovetingyuan
lovetingyuan / jsdom-prerender.js
Created December 22, 2020 07:15
use jsdom to prerender simple page.
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const path = require('path')
const fetch = require('node-fetch')
const finalhandler = require('finalhandler')
const http = require('http')
const serveStatic = require('serve-static')
function createServer (port, root = path.join(__dirname, 'dist')) {
const serve = serveStatic(root)
@lovetingyuan
lovetingyuan / redux-immer.js
Created November 14, 2020 04:11
combine redux and immer
import { createStore, combineReducers, compose, applyMiddleware } from 'redux'
import produce from 'immer'
function init (model, middleware) {
const reducers = {}
const root = Object.create({
get store () { return store },
get state () { return store.getState() }
})
Object.entries(model).forEach(([name, option]) => {
@lovetingyuan
lovetingyuan / promise_polyfill.js
Last active November 17, 2020 02:25
promise polyfill
function resolveValue (promise, value, resolve, reject) {
if (promise === value) { // 不能resolve自身
return reject(new TypeError('Can not resolve or return the current promise.'))
}
if (value === null || (typeof value !== 'object' && typeof value !== 'function')) {
return resolve(value)
}
let then // thenable可能是对象或者函数,它的then只能读取一次并且需要捕获可能的错误
try {
then = value.then
@lovetingyuan
lovetingyuan / javascript_extend.js
Created August 24, 2020 05:49
Javascript extend
function Parent (name) {
this.name = name
}
Parent.prototype.getName = function getName () { return this.name }
function Child (name, age) {
Parent.call(this, name)
this.age = age
}
Child.prototype = Object.create(Parent.prototype, {
const context = {
title: 'hello',
list: [1, 2, 3]
}
const template = ' \
<header>${title}</header> \
<ul>${list.map(i => `<li>${i}</li>`).join("")}</ul> \
'