GithubHelp home page GithubHelp logo

weekly's Introduction

MDH Weekly 前端周刊

MDH 前端周刊源于 2021 年的一次临时起意,通过公开立 Flag + 断更自罚 200 红包的方式,意外地坚持了下来。截止 2023/01/23 已更 84 期。内容包括每周社区的一周新闻、深度好文、Umi 和我、招聘/求职等,每篇深度好文我都会仔细阅读,然后贴上自己的笔记或心得。

每个人都很忙,大部分同学可能没时间跟进社区的变化,但了解前沿知识对技能成长、方案决策是很有帮助的,不管是做基建还是业务的同学,要做出技术改变业务的事,有大量输入会带来更多灵感。远的不说,我个人做 Umi 开发时,就会时常从周刊里翻资料。希望借此周刊能让大家用最少的时间了解前端社区变化。

关于我?

我叫陈成(sorrycc),曾就职于阿里巴巴,取花名「云谦」,后转岗到蚂蚁集团,工作至今。阿里 & 蚂蚁 10 年 + 老前端、ZJU、P8、Umi & Dva 等开源库作者,蚂蚁中台框架 Owner,「MDH 前端周刊」作者,热爱开源、分享、写作。

如何订阅?

你可以通过 RSS 的方式订阅;也可扫下方二维码关注我的公众号,然后每周一早上 9 点会准时收到推送。

联系我?

如有需要,你可以在 GithubTwitter知乎哔哩哔哩上找到我,也可以通过邮箱 sorrycc#gmail.com 联系到我,或者扫下方二维码加我微信沟通。

周刊不够看?还有我的付费星球。

我在知识星球开了个专栏,付费的那种,专栏名叫「云谦和他的朋友们」。截止 2023/01/23 已有 600+ 朋友加入,写了 249 篇日更短文。日更内容比较发散,包括个人经历、代码框架、面试晋升、趋势分析、工作方法相关的观点、新技术调研笔记、Umi 一手信息,以及几份计划中小册「前端工程化」「极简框架课:手写 Umi」「高效程序员」的试更。

weekly's People

Contributors

chelestewang avatar fengmk2 avatar fz6m avatar ningyougan avatar sorrycc avatar soyn avatar stormslowly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weekly's Issues

[自荐] AntV S2:开箱即用的多维交叉分析表格

简介

S2AntV 团队推出的数据表可视化引擎,旨在提供高性能、易扩展、美观、易用的多维表格。不仅有丰富的分析表格形态,还内置丰富的交互能力, 帮助用户更好地看数和做决策。

S2 是多维交叉分析领域的表格解决方案,数据驱动视图,提供底层核心库、基础组件库、业务场景库,具备自由扩展的能力,让开发者既能开箱即用,也能基于自身场景自由发挥。

S 取自于 SpreadSheet 的两个 S2 也代表了透视表中的行列两个维度。 详细介绍

image

image

地址

GitHub
官网

自荐: Smart Background 一个快速生成元素背景的react组件

Smart Background

在开发过程中,我们经常会遇到使用背景的地方,比如登录页面,用户信息页面,封面图……

寻找契合业务主题的背景十分耗费精力,总觉得做的背景不合适,

如果直接用图片呢,逻辑是比较简单,但寻找到一张契合业务主题的图片也不是那么容易,

所以想到用符号生成幕布一样的背景,从这个出发点做了这个组件,

滚动的图片墙可能这个需求比较常见,用SmartBackground可以很快速的实现.

npm version npm version npm version npm version npm version npm version

An React Component Can Automatically Generate The Background

一个快速生成元素背景的react组件

img

repository

https://github.com/yuanguandong/smart-background

Home Page | Live demo

https://yuanguandong.github.io/smart-background/

Install

npm i smart-background -S

How to use

import React from 'react';
import Background from 'smart-background';
import { FaLaugh } from 'react-icons/fa';

export default () => {
  return (
    <div style={styles.container}>
      <Background underlayColor="#f00" animation={{ type: 'bottom', speed: 5 }}>
        <div style={styles.content}>
          <FaLaugh style={styles.icon} />
          <h1 style={styles.text}>JUST DO IT</h1>
        </div>
      </Background>
    </div>
  );
};

const styles = {
  container: { width: '100%', position: 'relative', height: 350 },
  content: {
    width: '100%',
    height: '100%',
    display: 'flex',
    justifyContent: 'center',
    alignItems: 'center',
    flexDirection: 'column',
  },
  icon: { color: '#fff', fontSize: 120 },
  text: { color: '#fff', fontSize: 36, fontWeight: 'bold' },
};

Props

property description type defaultValue required
symbols 元素/字符/符号集合 (string | ReactNode | Element)[ ] ['●'] false
random 符号是否随机生成位置和大小 { fontSizeRange: number[] } | undefined false
underlayColor 底衬颜色 string false
underlayImage 底衬图片 string false
symbolsStyle 符号样式 Object {color: '#000', opacity: '0.3'} false
rotate 符号旋转角度 number 0 false
symbolSize 符号大小 number 90 false
gap 符号间距 number 10 false
animation 滚动动画 {type: 'left' | 'right' | 'top' | 'bottom'; speed: number;} false
exact 精确模式 boolean false false

求推荐😁

自荐一个能让你的网站自如切换暗夜模式的 React Hook 🌜

  • 项目地址:https://github.com/Turkyden/react-darkreader
  • 项目描述:一个能让你的网站自如切换 🌜/🌞 (黑夜/白天)模式的 React Hook!无需编写 CSS,多种 Switch 组件任你选择。
  • 推荐理由:想让自己的博客和 Github 一样,生动起来,自如切换 🌜/🌞 (黑夜/白天)模式,而又不想写任何 CSS,或对网站进行样式重构,那么 react-darkreader 一定适合你。

image

Light Dark
image image

Powered by umi&dumi @sorrycc

【开源自荐】反向选择路径链多语言vscode插件i18n-chain

github:https://github.com/FrankKai/i18n-chain
vscode marketplace: https://marketplace.visualstudio.com/items?itemName=frankkai.i18n-chain

i18n-chain

反向选择路径链多语言vscode插件。

通过分析本地项目的多语言文件(js、ts、json),生成snippet.json,帮助开发者实现多语言快速复用,提升开发效率。

演示图

两种方式

  • i18n-json: 适用于locales文件类型为json的项目。
  • i18n-ts: 适用于locales文件类型为ts file的项目。

安装及使用

  1. 插件市场搜索i18n-chain,安装即可
  2. 配置多语言文件目录 Preferences->Settings->User->Extensions->i18n-chain(例如,配置Locale Path,默认路径为/src/locales/zh)
  3. Command+Shift+P => i18n-json(Locale Path目录中的内容为json文件) 或者 Command+Shift+P => i18n-ts(Locale Path目录中的内容为ts文件)
  4. 键入i18n-后选择需要的链即可。

例如:

{
  "foo": "知道了",
  "foo.bar": "知道了",
  "foo.bar.baz": "知道了",
}
i18n-知道了

=>

1.foo

2.foo.bar

3.foo.bar.baz

=>

foo.bar.baz

自荐:Git 多用户配置管理器

背景

当工作项目的 Git user 配置和个人项目的配置不同时,需要手动去 git config user.name git config user.email 这些操作,相对比较繁琐,gum 这个工具就是 Git user config manager,方便 Git user 配置及管理。

Install

$ npm i -g @gauseen/gum

Example

$ gum list

Currently used name=gauseen [email protected]
┌────────────┬─────────┬─────────────────────────┐
│ group-name │    name │                   email │
├────────────┼─────────┼─────────────────────────┤
│    global  │ gauseen │ [email protected]       │
│    user1   │ li si   │ [email protected]          │
│    user2   │ wang er │ [email protected]        │
└────────────┴─────────┴─────────────────────────┘
$ gum use user1

Currently used name=li si [email protected]

Usage

Usage: gum [options] [command]

Commands:
  list                        List all the user config group
  set [options] <group-name>  Set one group for user config
    --name                    User name
    --email                   User email
  use [options] <group-name>  Use one group name for user config
    --global                  Git global config
  delete <group-name>         Delete one group
  help [command]              display help for command

建议:解决前端周刊微信中无法外链跳转的问题

众所周知,微信屏蔽了外部链接跳转,只允许长按二维码的方式让读者体验外部链接地址。

为了避免作图与繁琐上传,受 github-readme-statsshields 启发,我做了这个小工具,动态生成 SVG。

: : : Live Demo : : :

用法:

Wechat Link

[![Wechat Link](https://wechat-link.vercel.app/api?url=https://www.baidu.com&text=长按识别二维码查看原文)](https://www.baidu.com)

目前部署在 vercel

Deploy with Vercel

移动端排版效果:

image

自荐项目- 每日一题 VSCode插件

自荐项目

  1. 后续会优化分享题目图片能力
  2. 每日英语功能增加程序员英语单词学习,每日英语文章推荐
  • 项目描述:
    VSCode 上的前端刷题插件,保持高质量面试题每日更新
  1. 每日更新高质量前端面试题
  2. 支持提交答案查看其他人题解
  3. 每日更新英语单词和短句
  4. 同步语雀
  5. 支持一键分享题目图片
  • 推荐理由:有专人保持每日题目更新,还支持同步语雀整理自己的面试题库功能。

  • 截图:

image

自荐: 高性能的React表格组件

项目地址: https://github.com/HighPerformanceComponent/rc-grid

最佳的表格优化体验

通过开发rc-grid 表格,得到一下的优化经验,分享给大家,解决其他类似的问题

关于表格白屏, 也就是滚动的时候闪烁的问题。

在 sorrycc 的一篇最佳表格里面曾经提到过这样一个优化表格白屏幕的技巧。地址我依稀不清楚了,但是我内容我大概记得。 通过自定义滚动条, onwheel 来控制滚动逻辑。

很好奇,为什么 onwheel 可以去解决闪烁的问题?

后来通过搜索资料我才发现了一个关键的属性 will-change: transform; 可以优化滚动效率, 在通过检索资料后来我才发现一个有趣的事情。

浏览器在优化滚动效率的时候,会有这样两个线程来进行处理

  1. onScroll 事件是独立在一个线程中(也可能是在一个进程中)
  2. render 也就是渲染 div 的时候是独立的

这么优化的原因可能是因为,浏览器为了解决滚动的流畅问题。 将 onScroll 和 render 分开 ,这样不会影响到页面的流畅程度。 但是由于在 滚动的时候调用 setState/ useState 的时候会发现滚动的 render 线程异步没即时的执行。也就是说在 onScroll 中不一定等待render执行完成,才会执行下次的 onScroll 特别是在firefox 浏览器中异常明显。 因为firefox默认优化就是不同步的。而在webkit引擎中,似乎只有设置过 will-change 才会滚动异步。

知道产生白屏的原因以后,我们就知道如何解决了。 将 render 控制在自己的范围内,例如不使用浏览器的 onScroll, 而是通过
onwheel 来实现。 但是这样得不到 未来浏览器的关于滚动的fps 优化。同样也得不到现在目前浏览器带来的 “白屏的问题”

如果是在基于 webkit 浏览器中,同样 取消 will-change 这样也会同步render不会闪动,但是这个在 firefox 中无效。

例如我们取消 https://react-window.vercel.app/#/examples/list/fixed-size 例子中的 will-change 属性,同样滚动起来非常棒

关于表格的固定列, 固定表头

css 中的 position: sticky 是一个很棒的属性, 用来固定非常不错, 如果想要获得更好的浏览器支持,一般建议,表头和body分开, 通过事件,统一的同步滚动,但是这样会在低端的硬件情况下带来细微的滚动不同步的视觉效果。 position: sticky 带来的视觉效果,和性能都很棒,但是部分浏览器不支持。

关于是否使用 react-window or 自己实现虚拟滚动

建议自己实现虚拟滚动,虽然 react-window 非常棒,也开箱即用,但是在设置行点击,或则行样式的问题情况下, react-window 中的 只有 cell 没有 row 一些很好实现的功能点,在 react-window 中反而实现起来比较复杂了。 所以建议自己实现虚拟滚动方便优化性能

关于调试表格的性能问题

我比较常用的方式就是,可以打开浏览器的fps ,在控制台上输入 show fps 这样可以看到是在什么情况下导致的性能降低,
或则用 performance 来进行性能瓶颈的详细问题。 render 还是 脚本执行的时间。甚至在 performance 中还可以看到具体存在问题的具体行

!!! 优化到最后,其实总结经验无非就一条 “少即是快”, 越少的 dom元素,越少的循环次数那么执行的效率就越高(不过这是废话,但也是我体验最深刻的一句话)!!!

自荐一个好用的 vscode 插件 - 随意转换命名规范

vscode-string-transform

自由转换变量/字符串命名规范 🇨🇳

演示

使用演示

使用

记得先安装 vscode-string-transform 插件哦~ 😯

  • 输入指令

    • Mac command + shift + p
    • Windows ctrl + shift + p
  • 输入 to hello 选择要转换的目标规范

支持转换格式

  • 转换成 helloWorld(小驼峰命名) 命名规范
  • 转换成 HelloWorld(大驼峰命名) 命名规范
  • 转换成 hello_world(小蛇形命名) 命名规范
  • 转换成 HELLO_WORLD(大蛇形命名) 命名规范
  • 转换成 hello-world(串式命名) 命名规范

【开源自荐】vite + vue3 + ts 开箱即用现代开发模板

tov-template

vite + vue3 + ts 开箱即用现代开发模板



仓库地址 🦖

Github 👉 tov-template



动机 🐗

为什么要做这个 模板 呢?

  1. 为下次开发节省浪费在配置上的时间
  2. 结合主流插件整合现代开发架构,提高开发效率


特点 🐳

  1. Vite 的
  2. Vue3 的
  3. 文件路由
  4. 布局系统
  5. Mock 支持
  6. Api 自动引入
  7. 组件自动引入
  8. 图标自动引入
  9. VueUse 支持
  10. TypeScript 的
  11. Windi CSS 的
  12. 暗黑模式支持
  13. SWR 请求支持
  14. pinia 状态管理
  15. pnpm 包管理器
  16. 跳转进度条支持
  17. Inspect 调试支持
  18. 插件自动加载支持
  19. Vitest 单元测试支持
  20. 支持 Markdown 渲染
  21. 路径别名 ~ 支持
  22. 命令行自动创建与删除
  23. i18n 国际化支持
  24. 漂亮的 404 页 支持
  25. tsx 支持
  26. gzip 资源压缩支持
  27. 环境变量配置支持
  28. 统一的代码规范与风格支持
  29. 生产环境自动移除开发日志


自荐: 一个小巧漂亮的React 音乐播放器

  • 项目地址: https://github.com/lijinke666/react-music-player
  • 项目描述: 一个UI简洁美观, 功能丰富的播放器, 适用于个人博客, 音乐网站
  • 推荐理由: 支持迷你/完整两种模式, 默认提供黑白两套UI, 支持自适应黑暗模式, 毛玻璃, 响应式, 丰富的自定义功能, 完整的生命周期, 支持国际化, 音频淡入淡出, 歌曲拖拽排序, 并且支持 https://web.dev/media-session/, 可能是全网能找到最好用的音乐播放器 :)
  • 使用方式:
import ReactJkMusicPlayer from 'react-jinke-music-player'
import 'react-jinke-music-player/assets/index.css'

ReactDOM.render(
  <ReactJkMusicPlayer {...options} />,
  document.getElementById('root'),
)

image

image

建议:在每期发布时顺便发布一个 release

微信公众号会屏蔽掉外链,并且不能覆盖没有阅读微信公众号习惯的人(比如我),还是更习惯在 GitHub 上阅读。
我之前 watch 了这个仓库想每次发布时获得提醒,但是 issue 太多导致后来 unwatch 掉了。希望能够在每次发布时加上 Release,好处是:

  1. GitHub 支持仅 watch 一个项目的 Release 活动,这样既不会错过每次发布也不会被 issue 大量推送
  2. Release 现在会刷到 GitHub 的 timeline,可以帮助曝光

image

【开源自荐】一个轻量的 Web IDE UI 框架 - Molecule

watchman-logo

Molecule

A lightweight Web IDE UI Framework

CI Codecov NPM downloads NPM version

Molecule 是一款受 VSCode 启发,使用 React.js 构建的 Web IDE UI 框架。我们设计了类似 VSCode 的扩展(Extension)机制扩展 UI 交互,可以帮助开发者对 Workbench 的自定义。有类似 IDE 交互场景的朋友,如果正在使用 React.js

核心功能

  • 内置 React 版本的 Visual Studio Code Workbench UI
  • 基本兼容 Visual Studio Code 的 ColorTheme
  • 支持使用 React 组件自定义 Workbench UI 样式
  • 内置 Monaco Editor Command Palette、Keybinding等模块,并支持扩展
  • 支持 i18n,内置简体中文、English 2 种语言
  • 内置一个简单的 Settings 模块,支持在线编辑修改以及扩展
  • 内置默认的 Explorer, Search 等组件,并支持扩展
  • Typescript 支持

与其他开源的 Web IDE 的区别?

  • Molecule 只是一个单纯的 Web IDE UI 交互框架,不涉及例如文件系统、版本管理、 LSP、DAP、Terminal 等更复杂的 IDE 功能,需要开发者自己手动实现
  • 基于 React.js 的组件库,更好的 UI 自定义能力, React.js 应用无缝接入
  • 基本兼容了 VS Code 上千种 ColorTheme 扩展

【开源自荐】musk-clone 基于已有数据,快速生成mock数据

主要解决这个问题:有时候接口只有1个数据,复制1个新的再改,改的很烦

repo地址:https://github.com/FrankKai/musk-clone

musk-clone

生成具有相同数据结构的模拟影子克隆,速度与 Elon Musk 一样。

特斯拉CEO马斯克生9个子女,说自己为提高美国生育率正在尽一份力

为什么要用 musk-clone?

当你想制作一个与现有的具有相同数据结构的新模拟项目时,你必须复制--> 逐一修改--> 粘贴,这个过程会花费很多时间。

现在您可以使用musk-clone以节省您的时间!

根据传入的数据,快速生成一份相同数据结构的数据,用于开发阶段快速构造mock数据

在线demo

https://codesandbox.io/s/musk-clone-x137mv

安装

yarn add -D musk-clone

使用

基本使用

import muskClone from 'musk-clone'

const src = ["foo", 1, true]
const target = muskClone(src);
console.log(target); 
// ["foo-0v3DrX7hoOqIFaQeMDDaF", 71, true],

常用场景

import muskClone from 'musk-clone'

const src = [
  { foo: "str", bar: 1, val: true },
  { foo: "str1", bar: 2, val: false },
]
const target = muskClone(src);
console.log(target); 
// [
//   { foo: "str-jHGKjWz3kz0ome5-tl6MS", bar: 36, val: false },
//   { foo: "str1-LqOPbB5xXYKXV8hmBB_Q6", bar: 2, val: true }
// ]

自荐:一个好用好看的 Vue 3 头像组件,通过排列组合满足各种需求

https://github.com/wjq990112/holiday-avatar

English | 简体中文

holiday-avatar

Introduction

Vue library for generating nice user avatar. (Inspired by react-nice-avatar)

Version
npm download

Online Editor / Preview

Assets

Installation

npm install holiday-avatar
# or
yarn add holiday-avatar
# or
pnpm install holiday-avatar

Usage

Import Directly (Recommended)

You can import component directly and use it. In this form, only components imported will be bundled.

<template>
  <HldAvatar />
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
});
</script>

or

<template>
  <hld-avatar></hld-avatar>
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
});
</script>

Install Globally (Not Recommended)

No tree-shaking. Bundle will have redundant codes.

import { createApp } from 'vue';
import App from './App.vue';
import Avatar from 'holiday-avatar';

createApp(App).use(Avatar).mount('#app');

After the installation. You can use all the components in you SFC like this.

<template>
  <HldAvatar />
</template>

or

<template>
  <hld-avatar></hld-avatar>
</template>

Generate Config

Generate random config, the config can be saved into your database to use later.

<template>
  <HldAvatar v-bind="{ ...config }" />
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar, genConfig } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
  setup() {
    const config = genConfig();

    return {
      config,
    };
  },
});
</script>

If you need to customize the configuration, there are two ways to provide you with the ability to customize.

<template>
  <HldAvatar v-bind="{ ...config }" />
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar, genConfig } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
  setup() {
    // You can also pass in other options in the option list below. e.g. `{ sex: 'female', eyeType: 'smile' }`
    const config = genConfig({ bgColor: '#000' });

    return {
      config,
    };
  },
});
</script>

or

<template>
  <!-- You can also pass in other options in the option list below with kebab-case. e.g. `sex="female" eye-type="smile"` -->
  <HldAvatar v-bind="{ ...config }" bg-color="#000" />
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar, genConfig } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
  setup() {
    const config = genConfig();

    return {
      config,
    };
  },
});
</script>

NOTE: The latter option will override the previous!

<template>
  <!-- `bg-color` will be overridden as `#fff` -->
  <HldAvatar v-bind="{ ...config }" bg-color="#fff" />
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar, genConfig } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
  setup() {
    const config = genConfig({ bgColor: '#000' });

    return {
      config,
    };
  },
});
</script>

Same as above.

<template>
  <!-- `bg-color` will be overridden as `#000` -->
  <HldAvatar bg-color="#fff" v-bind="{ ...config }" />
</template>

<script>
import { defineComponent } from 'vue';
import { Avatar, genConfig } from 'holiday-avatar';

export default defineComponent({
  components: {
    HldAvatar: Avatar,
  },
  setup() {
    const config = genConfig({ bgColor: '#000' });

    return {
      config,
    };
  },
});
</script>

Options

The options can be passed into genConfig or as Vue props.

key type default accept tips
bgColor string
hatColor string
faceColor string
hairColor string
shirtColor string
hairColorRandom boolean false
sex string male, female
earSize string small, big
eyeType string circle, oval, smile
hatType string none, beanie, turban
hairType string normal, thick, mohawk, femaleLong, femaleShort
noseType string short, long, round
mouthType string laugh, smile, peace
shirtType string hoody, short, polo
glassesType string none, round, square
shape string circle circle, rounded, square

License

Released under MIT by @wjq990112.

自荐:React Keyevent ——非常容易使用的一个键盘事件监听react组件,可实现各种自定义快捷键功能

React Keyevent

npm version npm versionnpm version npm version npm version npm version

An easy-to-use keyboard event react component, Can achieve a variety of custom keyboard functions, Package size less than 3kb

非常容易使用的一个键盘事件监听react组件,可实现各种自定义快捷键功能,只有不到3kb

repository-open-graph-template副本

repository

https://github.com/yuanguandong/react-keyevent

Live demo

https://react-keyevent.netlify.app/

https://yuanguandong.github.io/react-keyevent/

Install

npm i react-keyevent -S

How to use

import React, { useState } from "react";
import Keyevent from "react-keyevent";

const TopSide = () => {
  const [count, setCount] = useState(0);
  const onAltT = () => {
    setCount(count + 1);
  };
  return (
    <Keyevent
      className="TopSide"
      events={{
        onAltT,
      }}
      needFocusing
    >
      <span className="tip">Click To Focusing</span>
      <div className="group">
        <span className="key">Alt</span>
        <span className="key">T</span>
        <span className="count">{count}</span>
      </div>
    </Keyevent>
  );
};
export default TopSide

Props

property required type defaultValue description
events true { [key: string]: (e: KeyboardEvent) => void } null The binding keyboard events 绑定的键盘事件
needFocusing false boolean false 是否需要聚焦,若值为true,则需要聚焦Focus这个容器组件(点击)

求推荐😁

推荐一批前端框架/工具库

  • Rome 一套想要整合Babel/Webpack/ESLint/Prettier等工具的工具链,不依赖任何现有的库,作者从零实现了parser、ast相关的功能。
  • gitify 一个基于Electron的GitHub通知客户端,适合开源项目维护者使用。
  • terminalizer 终端录制神器
  • piscina NodeJS的线程池实现
  • peerjs 基于WebRTC的p2p实现
  • vite-plugin-mix 类似于NextJS的API Routing,同时开发前后端应用(非一体化)
  • blitzjs 基于GraphQL + NextJS + Prisma的一套一体化方案,神奇之处在于不需要会GraphQL,因为作者提供了神奇的工具函数useQuery和useMutation抹掉了差异
  • bundless 基于ESBuild的dev-server与bundler,快!
  • vitro 基于bundleless(所以也就基于了ESBuild,快!)的storybook,同样为React组件提供隔离的测试环境
  • genql,有点像GraphQL版本的Prisma,从GraphQL Schema生成client,然后在代码中导入client来获取全面的TS类型支持。
  • json-schema-to-ts,从JSON Schema生成TS类型定义
  • @nrwl/nx 结合了Angular工作流 + Monorepo
  • rushstack 微软出品的Monorepo方案
  • npm-run-path 提供类似npm scripts的效果,使得不需要在npm scripts中就能使用本地安装的包
  • luna 基于Electron的npm依赖桌面可视化
  • signale 让console.log不再单调
  • changesets 适用于monorepo的版本与changelog管理工具
  • tsdx 零配置的TS开发工具集,封好了底层,只管用就行了

【开源自荐】commitizen适配器 cz-git

主要功能:

一款工程性更强,高度自定义,标准输出格式的 commitizen 适配器

工具特性:

  • 友好型命令行工具,支持搜索和选择,减少重复性输入,让输出标准化 git commit message 变得简单
  • 高度自定义,让工具的使用更贴合你或团队的习惯
  • 与 commitlint 配合紧密,给予命令行提示信息 | 让 commit 与 issue 关联更简单,特别在 gitee 当中 | 支持emoji

项目:

Github: https://github.com/Zhengqbbb/cz-git
文档介绍:https://cz-git.qbenben.com/zh/


logo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.