板凳快报4月

proposal-iterator-helpers

tc39增加了迭代器helpers函数的proposal.已经到了Stage 3阶段。通过这些迭代函数可以很方便的对迭代器进行处理。比如

ini 复制代码
    function* naturals() {
        let i = 0;
        while (true) {
            yield i;
            i += 1;
        }
    }

    const result = naturals()
    .map(value => {
        return value * value;
    });
    result.next(); //  {value: 0, done: false};
    result.next(); //  {value: 1, done: false};
    result.next(); //  {value: 4, done: false};

proposal-signals

tc39增加了signals的proposal。现在是Stage 0阶段。在solidjs中就有对signals的封装和使用。通过signals可以一定程度上简化在业务逻辑中的依赖关系覆盖和监听逻辑。

Frontend Development Beyond React: Svelte

这篇文章介绍Svelte的基本原理和相关使用。对比react,Svelte的没有虚拟dom、有编译时优化、响应式更加高效。React也在编译时优化做尝试,React Compiler已经在instagram有使用

JavaScript Visualized: Promise Execution

这篇文章通过动图的方式介绍JavaScript中Promise的执行过程

The problem with functional components

在之前的文章中聊聊我对React Hooks的理解中,梳理了对react引入hooks的理解

  • 通过的代码复用方式
  • 解决老的问题 比如生命周期函数可能存在多次调用、组件内监听解绑逻辑分离
  • 规范使用范式 这篇文章的作者通过例子说明在使用函数组件的一些问题,比如hooks很多缺少治理,hooks的依赖问题,代码可读性问题等。对于这个问题的确在react中没有强制的一些限制解法。自己在开发中也遇到一个组件多个useState声明造成代码可读性下降的问题。对于函数组件的hooks它更应该是可插拔的复用能力或者偏向于与组件结合的业务逻辑,一些数据或者非视图层逻辑应该做到更好的拆分.

动态表单的设计思想及实现策略

这篇文章主要介绍动态表单的设计思想,在中后台系统的一些表单项是可以通过动态表单来实现的。

bfcache

浏览器的往返缓存,在一些特定场景需要针对bfcache做处理逻辑

工具

Bun

Bun现在支持windows了,Bun选择的JavaScript执行引擎和实现语言使得Bun有一定的性能优势,值得尝试

react-responsive

一个用于在react代码中做媒体查询实现动态逻辑的库。在阅读源码的过程中发现它使用了css-mediaquery实现静态查询的匹配

ini 复制代码
    var mediaQuery = require('css-mediaquery');
    
    var isMatch = mediaQuery.match('screen and (min-width: 40em)', {
        type : 'screen',
        width: '1024px'
    });

使用window.matchMedia做动态的查询变更通知能力

Preview.js

Previerw.js可以实现一些UI组件的预览,可以实现动态属性修改的预览、控制台的console输出、不同设备下查看样式等

源码解读

use-local-storage-state

javascript 复制代码
    import useLocalStorageState from 'use-local-storage-state'

    export default function Todos() {
        const [todos, setTodos] = useLocalStorageState('todos', {
            defaultValue: ['buy avocado', 'do 50 push-ups']
        })
    }

在之前的聊聊页面间的通信机制中有介绍到localStorage可以实现跨Tab的消息通信,在前端的数据存储中localStorage是一种常用的前端存储方案,use-local-storage-state这个库实现了数据的存储和数据的变更通知,下面分别从这两个点看下具体实现

数据存储

vbnet 复制代码
try {
    // 支持localStorage的时候使用localStorage存储
    localStorage.setItem(key, stringify(value))
    inMemoryData.delete(key)
} catch {
    // 不支持localStorage的时候使用内存对数据存储
    inMemoryData.set(key, value)
}

数据变更通知

scss 复制代码
   const value = useSyncExternalStore(
    useCallback(
        (onStoreChange) => {
            const onChange = (localKey: string): void => {
                if (key === localKey) {
                    onStoreChange()
                }
            }
            // callback注入,当onStoreChange执行 会触发页面更新
            callbacks.add(onChange)
            return (): void => {
                callbacks.delete(onChange)
            }
        },
        [key],
    ),
    () => {
        // 通过ref存储当前的值 返回
    },
    () => defaultValue,
)

useEffect(() => {
    // 当不需要通知同步的时候直接返回
    if (!storageSync) {
        return undefined
    }
    const onStorage = (e: StorageEvent): void => {
        if (e.storageArea === goodTry(() => localStorage) && e.key === key) {
            triggerCallbacks(key)
        }
    }
    // 订阅storage 触发更新回调
    window.addEventListener('storage', onStorage)

    return (): void => window.removeEventListener('storage', onStorage)
}, [key, storageSync])
相关推荐
前端不太难30 分钟前
从 Navigation State 反推架构腐化
前端·架构·react
前端程序猿之路1 小时前
Next.js 入门指南 - 从 Vue 角度的理解
前端·vue.js·语言模型·ai编程·入门·next.js·deepseek
大布布将军1 小时前
⚡️ 深入数据之海:SQL 基础与 ORM 的应用
前端·数据库·经验分享·sql·程序人生·面试·改行学it
川贝枇杷膏cbppg1 小时前
Redis 的 RDB 持久化
前端·redis·bootstrap
D_C_tyu2 小时前
Vue3 + Element Plus | el-table 表格获取排序后的数据
javascript·vue.js·elementui
JIngJaneIL2 小时前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
天外天-亮2 小时前
v-if、v-show、display: none、visibility: hidden区别
前端·javascript·html
jump_jump2 小时前
手写一个 Askama 模板压缩工具
前端·性能优化·rust
be or not to be2 小时前
HTML入门系列:从图片到表单,再到音视频的完整实践
前端·html·音视频
90后的晨仔3 小时前
在macOS上无缝整合:为Claude Code配置魔搭社区免费API完全指南
前端