热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Mobx的多页面小顺序的全局同享状况治理实践

what名字很长很绕靠口,总的来说,本文是对开辟小顺序过程当中运用mobx的一个总结。状况治理,比拟人人也很熟悉,望文生义,是对前端页面繁复的状况举行治理,在此,我也不过量赘述。所

what

  • 名字很长很绕靠口,总的来说,本文是对开辟小顺序过程当中运用mobx的一个总结。

  • 状况治理,比拟人人也很熟悉,望文生义,是对前端页面繁复的状况举行治理,在此,我也不过量赘述。

  • 所以虽然是是用在小顺序上,不过我想关于WebApp的状况治理,也有这么一丢丢启示。

why

  • 为何要举行状况治理?
    如今的小顺序俨然是Hybrid App,又像是PWA,但固然也是一个WebApp,更不用说他的语法和vue稍微有这么一丢丢类似。有reactvue的实践在前,所以关于小顺序上那么多的页面状况和数据缓存,必将也要引入一个状况治理工具

  • 为何是mobx
    轻易,快速,进修成本低,固然也是仁者见仁智者见智

how

  1. 在小顺序中引入mobx
    在这里我运用了wechat-weapp-mobx这个库。在./libs目次下放入mobx.jsobserver.js这两个库,同时在./store目次下新建store.js用于寄存全局状况。

  2. 竖立store
    由于小顺序中不支撑@decorate装潢器,所以采用了extendObservable的写法。别的,小顺序支撑import语法和require语法。我比较喜好import语法,你们呢?我以为在action中不应写入庞杂逻辑代码,坚持简洁性和可复用性,你们怎么看

    // store.js
    // 引入必需的库
    const mobx = require('../libs/mobx');
    const extendObservable = require('../libs/mobx').extendObservable;
    const computed = require('../libs/mobx').computed;
    const toJS = require('../libs/mobx').toJS;
    let store = function () {
    extendObservable(this, {
    // observable data
    players: [],
    // computed data
    get count() {
    return this.players.length;
    }
    });
    // action
    this.addPlayer = name => {
    let len = this.count; //此处挪用computed data
    let id = len === 0 ? 1 : this.players[len - 1].id + 1;
    this.players.push(new player(name, id));
    }
    }
    export default store;

  3. 全局引入store
    尽人皆知,运用mobxstore要运用new store(),假如我们想全局挪用,必将不可能在每一个页面都new一个sotre,由于如许的话每一个页面的store都是一个全新的store。在这里,我在app.js里引入store,并挂载在全局变量globalData下。别的,小顺序中不支撑途径的省略。

    //app.js
    const observer = require('./libs/observer').observer;
    import store from './stores/index'; // 小顺序中不支撑省略挪用
    App(observer({
    onLaunch: function () {
    },
    globalData: {
    store: new store()
    }
    }))

  4. 在pages里挪用全局的store
    能够同时运用内置的data举行双向绑定哦

    // index.js
    const observer = require('../../libs/observer').observer;
    let app = getApp();
    Page(observer({
    data: {
    mes: 'hello jim green'
    },
    props: {
    store: app.globalData.store
    },
    }))

  5. 在页面中挪用store


    // 挪用observable data
    {{item.id}}:{{item.name}}

    {{props.sotre.count}} // 挪用computed data

  6. 更新多个页面的store
    题目来了,这个时刻,多个页面的store照样自力的,怎样悉数更新呢?答案就是在onShowonHide或许onUnload这三个性命周期函数中跟新全局的store

    onShow: function() { // 显现时更新本页面store
    this.props.store = app.globalData.store
    },
    onHide: function() { // 隐蔽时更新全局store
    app.globalData.store = this.props.store;
    },
    onUnload: function() { // 页面跳转返回时更新全局store
    app.globalData.store = this.props.store;
    },

  7. store和localStorage的长效存储
    考虑到收集另有顺序崩溃的题目,我将store存储在localStorage中以便恢复,我在index.jsonLoad中挪用get storage,在onHideset storage。由于toJS要领返回了一个不支撑[Symbol.iterator]()的对象,所以在store里举行了以下设置

    // index.js
    onLoad: function () {
    let store = wx.getStorageSync('store');
    if(store) {
    this.props.store.formStorageToStore(store);
    }
    },
    onHide: function () {
    let store =this.props.store.currentStore;
    wx.setStorageSync('store', store)
    },
    // store.js
    get currentStore() {
    let {players,games,currentGame,hidden,filter} = toJS(this);
    return {players,games,currentGame,hidden,filter};
    }
    this.formStorageToStore = ({players,games,currentGame,hidden,filter}) => {
    this.players = players;
    this.games = games;
    this.currentGame = currentGame;
    this.hidden = hidden;
    this.filter = filter;
    }

others

讲点其他

  • 本项目标示例小顺序地点weapp-bmscore,迎接列位老铁点个关注666


推荐阅读
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
author-avatar
晴华姐姐_286
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有