前端随心记---------简单.可扩展的状态管理工具MobX

Mobx是一个功能强大,上手非常容易的状态管理工具。就连redux的作者也曾经向大家推荐过它,在不少情况下你的确可以使用Mobx来替代掉redux。

MobX:

MobX 是一个经过战火洗礼的库,它通过透明的函数响应式编程(transparently applying functional reactive programming - TFRP)使得状态管理变得简单和可扩展。Mobx 就是一个集中化管理数据的库,类似之前学习的 vuex 和 redux。

为什么要使用它呢?

在单页项目中,实现组件间的通信问题。父子(props) 子父(event)

如何使用呢?

1. mobx +jquery 搭配

2. mobx + vuejs 搭配

3. mobx + react 搭配

使用文档:

https://cn.mobx.js.org/

https://juejin.im/post/5d9f33066fb9a04df9018cf2

开发过程:

1.npx create react  app  myapp

2.npm install mbox

3.npm install mbox-react

3.yarn add customize-cra react-app-rewired --dev  安装装饰器        https://www.npmjs.com/package/customize-cra#with-mobx

创建store文件夹 index.js

import {observable, computed, action} from ‘mobx‘;

// 使用mobx 管理数据

class CounterApp {

    appName = ‘counter‘; // 代表的含义现在仓库的里面的 appName 这个不受mobx处理
    // 这个类里面用来存放数据
    // 相当于之前学习 redux 里面 initState
    @observable count = 1;  // observable 是一个装饰器模式,代表现在的 count 是给 mobx 管理的,如果不希望管理,则我们不需要加该修饰器

    // computed 是类似 vuejs 里面的计算属性
    // 计算属性,将 count X 2 返回
    // 定义的时候是一个方法,但是调用的时候是一个属性
    @computed get doubleCount () {
        return this.count * 2;
    }

    // 定义操作数据的方法

    @action.bound
    increment() {
        this.count += 1;
    }

    @action.bound
    decrement() {
        this.count -= 1;
    }
}

// 暴露一个仓库 提供数据和操作数据的方法 其他组件可以使用

export default new CounterApp();

项目myapp中的App.js文件:

import React, {Component} from ‘react‘;

// observer 是视图用来订阅数据的 react-redux 里面的 connect
import {observer} from "mobx-react";

import Show from ‘./components/Show‘;

import store  from  ‘./store‘;

console.log(store); // mobx 管理的仓库
window.store = store; // 手工的调试数据是否发生变化

// 装饰器修饰代表该视图订阅了数据,一旦数据发生变化,视图里面刷新

@observer
class App extends Component {
    render() {
        return (
            <div>
              <button onClick={store.decrement}>-</button>
              <p>{store.count}</p>
              <Show store={store} />
              <button onClick={store.increment}>+</button>
            </div>
        );
    }
}

export default App;

创建子组件components文件夹show.js

import React, {Component} from ‘react‘;

// 注意:现在可以使用 redux 和 mobx 进行数据的集中管理?
// 到底使用哪个的问题?
// 大项目如果长期开发的 redux ; 如果小项目 mobx 甚至不用。

class Show extends Component {
    render() {
        console.log(this.props);
        return (
            <div>
                <p>show子组件-{this.props.store.count}</p>
                <p>show子组件-{this.props.store.doubleCount}</p>
            </div>
        );
    }
}

export default Show;

原文地址:https://www.cnblogs.com/hudunyu/p/11665089.html

时间: 2024-10-07 04:10:52

前端随心记---------简单.可扩展的状态管理工具MobX的相关文章

前端随心记---------webpack管理工具

webpack: 官网:https://www.webpackjs.com/ 由来: 1.开发的时候,我们写的代码是有注释,有空格(文件比较大)在开发环境中注释有意义的,但是在生产环境中,注释是没有意义的.代码应该是尽可能压缩的足够小(网络请求)如果我们没有借助一些其他工具的时候,我们需要手工的把 xxx.js 转换 xxx.mini.js 文件.(文件美化) 2.我们的js在发展的过程中,出现很多的新特性,例如 es6 箭头函数.class 语法糖,Promise等.这些新的特性在不做处理的时

C#实例之简单聊天室(状态管理)

前言        状态管理是在同一页或不同页的多个请求发生时,维护状态和页信息的过程.因为Web应用程序的通信协议使用了无状态的HTTP协议,所以当客户端请求页面时,ASP.NET服务器端都会重新生成一个网页实例.此时,旧网页的任务完成,旧网页的实例也随之消失.这种无状态,意味着客户端用户在浏览器中的一些状态或是对数据的一些修改都将丢失. 为了弥补这种基于web应用程序的固有限制,ASP.NET提供了多种用于管理状态的功能. 简单聊天室 这里运用System.Web命名空间的那些管理状态的类,

LogCook 一个简单实用的Android日志管理工具

众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能达到事半功倍的效果.开发者必须要明白日志的价值和意义,万万不可忽略和轻视. LogCook是一款非常简洁实用的Android日记管理工具.LogCook的中文翻译是日志厨师,你可以把它看作是一个日志美食家. 特点 作为一款日志管理工具它最大的特点就是简单实用,与Android原生的日志功能相比较它具

前端随心记---------vuejs流行的UI框架

一:Element element ui框架的按钮组件,这款由饿了么前端开源的UI框架,一经面世,就收获大量程序员的芳心.在github 上更是高达29.8k的star早已说明一切.用于开发PC端的页面还是绰绰有余的.如果说你是用vue开发者,却没用过element UI,那你肯定不是合格的vue开发者. 文档地址:http://element-ui.cn 二:iview iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品.使用单文件的 Vue 组件化

前端随心记---------React简介(1)

React 简介: React 是一个用于构建用户界面的 JAVASCRIPT 库. React 主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源. React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它. React诞生的原因 主要是当时市面上的这些框架都无法满足 facebook 公司的业务需求 (1. 数据量很大,数据不好管理

前端随心记---------前海面试汇总

react里面:state和prop的区别?setState为什么是异步的?组件传值有几种方式? 答:1.prop用于定义外部接口,state用于记录内部状态.2.prop的赋值在外部使用组件时,state的赋值在组建内部.3.组件不应该改变prop的值,但是state的存在目的是让组件来改变. 2.setState异步更新状态使得并发更新组件成为可能. 资料:https://segmentfault.com/a/1190000013040438?utm_source=tag-newest 3.

前端随心记---------Axios/fetch/ajax的区别

一.jQuery  ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () {}, error: function () {} }); 传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱. JQuery ajax 是对原生

前端随心记(一)

前端 基础易错题(一) 案例一::介绍js原型链继承原理,以及prototype和--proto--的区别! 1.任何一个构造函数都有一个属性prototype叫做构造函数的原型,是一个对象,并且该对象默认情况下指向Object实例,constructor指向当前构造函数,--proto--指向Object.protopyte. 2.使用构造函数实例化的对象存在一个--proto--属性,指向当前构造函数的prototype. 3.当我们调用实例对象的属性和方法时,先在自身上面进行查找[自己身上

前端随心记---------HTML5+CSS系列3.0

表单 u 表单的作用:用来收集用户的信息的; 表单框 : 表单 ?表单的作用:用来收集用户的信息的; 表单框 : <form name="表单名称" method="post/get" action="提交地址"> </form> <input type="text" value="默认值"/> 文本框 <input type="password"