板凳快报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])
相关推荐
什么鬼昵称9 分钟前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色27 分钟前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_23444 分钟前
npm、yarn、pnpm之间的区别
前端·npm·node.js
秋殇与星河1 小时前
CSS总结
前端·css
NiNg_1_2341 小时前
Vue3 Pinia持久化存储
开发语言·javascript·ecmascript
读心悦1 小时前
如何在 Axios 中封装事件中心EventEmitter
javascript·http
BigYe程普1 小时前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
神之王楠1 小时前
如何通过js加载css和html
javascript·css·html
余生H1 小时前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
程序员-珍1 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发