Quantcast
Channel: InfoQ - 促进软件开发领域知识与创新的传播
Viewing all articles
Browse latest Browse all 1056

年度最具影响力开源JavaScript软件库Immer发布第四版

$
0
0

JavaScript获奖软件库Immer的主要贡献者Alec Larson在几天前发布了该软件的第四次主迭代版本,针对一些边缘情况打了补丁。作为JavaScript软件库,Immer通过一种称为“写入时复制(copy-on-write)”的机制,支持开发人员在像操作可变状态一样便利地操作不可变状态。今年,Immer荣获了多项殊荣,包括响应式开源奖( React open source award)中的“年度最具突破者”(Breakthrough of the year),以及JavaScript开源奖(JavaScript open source award)中的“最具影响贡献者”(Most impactful contribution)。

Immer(德语,表示“一以贯之”)软件库支持JavaScript开发人员像操作可变状态那样,简洁便利地操作不可变状态。为实现该功能,Immer结合JavaScript的Proxy技术,使用了一种称为“结构化共享(structural sharing)”的“写入时复制”机制。

具体而言,作为当前状态currentState的代理,开发人员会维护一个临时的draftState可变状态。进而根据临时状态的可变情况,生成一个nextState状态,并将状态的未更改部分共享给currentState状态。由此,开发人员像以往那样改变数据,同时保有不可变数据的收益。

下面给出一段示例代码:

import produce from "immer"

const baseState = [
    {
        todo: "Learn typescript",
        done: true
    },
    {
        todo: "Try immer",
        done: false
    }
]

const nextState = produce(baseState, draftState => {
    draftState.push({todo: "Tweet about it"})
    draftState[1].done = true
})

示例代码展示了如何在不影响baseState的情况下操作可变状态draftState。而nextState是一个不可变状态树,维护了对draftState的所有更改操作,并实现对状态中所有未更改之处的结构化共享。


Viewing all articles
Browse latest Browse all 1056

Trending Articles