IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React的mobx配置、使用以及统一封装代码实例详解 -> 正文阅读

[JavaScript知识库]React的mobx配置、使用以及统一封装代码实例详解

1. 安装mobx相关工具

yarn add mobx mobx-react-lite

2.1 若不进行统一管理,直接使用mbox(后面会说统一管理)

新建一个store.js文件夹,下面新建一个count.js文件

//引入
import { makeAutoObservable } from "mobx";

class Counter{
  count = 0
  constructor() {
  //定义this
    makeAutoObservable(this)
  }
  addCount = () => {
    this.count++
  }
}
// 实例化导出 (这里必须实例化导出,否则无法使用)
//这里注意大小写,导出的是小写的
const counter = new Counter()
export { counter }

2.2 在相应的模块引入

import React from 'react'
import { counter } from '@/store/count.js'
引入observer
import { observer } from 'mobx-react-lite';

 function Box() {
  console.log(counter.count);
  return (
    <div>
      //想在里面拿值,直接用(counter.xxx,方法也是如此)就可以
      {counter.count}
      <button onClick={counter.addCount}></button>
    </div>
  )
}

//使用observer监听,若不使用则数据无法在页面上更新
export default observer(Box)

3.1 使用mbox进行computed计算

import { makeAutoObservable } from "mobx";

class Counter{

  list = [1,2,3,4]
  constructor() {
    makeAutoObservable(this)
  }
  // 定义一个计算属性 前面需要加get
  get filterList() {
    return this.list.filter(item =>item>2)
  }

  // push数据
  addList = () => {
    this.list.push(5)
  }

}
// 实例化导出
const counter = new Counter()
export { counter }

3.2引入

import React from 'react'
import { counter } from '@/store/count.js'
import { observer } from 'mobx-react-lite';

 function Box() {
  return (
    <div>
      {counter.filterList}
      <button onClick={counter.addList}>push</button>
    </div>
  )
}

export default observer(Box)

4.统一管理mbox

如果要统一管理的话,和直接使用有一些差别,(不能在里面直接实例化,否则会报错,因为你会在统一管理里面实例化)

1.新建一个store文件夹

2.新建index.js统一管理

3.其他的文件随意命名,不过一般xxx.Store.js的命名方式

话不多说,直接上代码

这里是login.Store.js文件
import { makeAutoObservable } from "mobx";
import { http, storeToken, getToken,removeToken } from "../API";

class Login{
   //当token没有的时候,给他一个空值
  token = getToken() || ''
  constructor() {
    makeAutoObservable(this)
  }
   //发送登录请求
  toLogin = async ({mobile,code}) => {
    const {data:res} = await http.post('/authorizations',{
      mobile,code
    })
    this.token = res.token
    // 存token
    storeToken(this.token)
  }
  //清空token
  loginOut = () => {
    this.token = ''
    removeToken()
  }
}
export default Login
//这里是index.js文件  (统一管理)
import React, { useContext } from "react";
import Login from "./login.Store";

class RootStore {
  constructor() {
    this.login = new Login()
    //如果还有其他文件,依照上面引入即可
  }
}
// 导入useStore方法供组件使用数据
const rootStore = new RootStore()
const context = React.createContext(rootStore)
const useStore = () => useContext(context)
export {useStore}

在函数组件引入并使用

import { useStore } from '@/store'
import { useNavigate } from 'react-router-dom'
//解构赋值
const { login } = useStore()
const navigate = useNavigate()
//这里的values就是你form表单里面的值
const onFinish = async (values) => {
    await login.setToken({
      mobile: values.mobile,
      code: values.code
    })
    navigate('/layout/home', { replace: true })
    message.success('登录成功');
};

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:15:02  更:2022-04-27 11:17:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:49:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码