[MST] Use Volatile State and Lifecycle Methods to Manage Private State

本文介绍如何使用MobX State Tree (MST)管理应用程序的状态,包括通过AbortController取消fetch请求的方法,并展示了如何利用MST的生命周期钩子来处理WebSocket连接和其他资源的释放。

MST has a pretty unique feature: It allows you to capture private state on models, and manage this state by using lifecycle hooks. For example by setting up a WebSocket connection and disposing of the connection automatically as soon as the instance gets removed from the store. In this lesson, we will leverage cancellable fetches to abort in-flight requests when appropriate

In this lesson you will learn:

  • Aborting window.fetch requests :-).
  • Storing private, volatile, internal state in the function closure
  • A second life-cycle hook: beforeDestroy

 

The whole point for this post is showing how to abort fetch request:

export const Group = types
    .model({
        users: types.map(User)
    })
    .actions(self => {
        let controller

        return {
            afterCreate() {
                self.load()
            },
            load: flow(function* load() {
                controller = window.AbortController && new window.AbortController()
                try {
                    const response = yield window.fetch(`http://localhost:3001/users`, {
                        signal: controller && controller.signal
                    })
                    applySnapshot(self.users, yield response.json())
                    console.log("success")
                } catch (e) {
                    console.log("aborted", e.name)
                }
            }),
            reload() {
                if (controller) controller.abort()
                self.load()
            },
            beforeDestroy() {
                if (controller) controller.abort()
            }
        }
    })

 

https://developer.mozilla.org/en-US/docs/Web/API/AbortController

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值