当前位置: 首页 > news >正文

网站及建设中页面南通网站建设方案咨询

网站及建设中页面,南通网站建设方案咨询,西安市建设工程信息网官网,做二手家电网站怎样React 中使用 mobx 配置开发环境 安装mobx和中间件工具 mobx-react-lite 只能函数组件中使用 yarn add mobx mobx-react-lite初始化 mobx 定义数据状态 state在构造器中实现数据响应式处理 makeAutoObservble定义修改数据的函数 action实例化 store 并导出 import { compute…

React 中使用 mobx

配置开发环境

安装mobx和中间件工具 mobx-react-lite 只能函数组件中使用

yarn add  mobx  mobx-react-lite

初始化 mobx

  1. 定义数据状态 state
  2. 在构造器中实现数据响应式处理 makeAutoObservble
  3. 定义修改数据的函数 action
  4. 实例化 store 并导出
import { computed, makeAutoObservable } from "mobx";class CounterStore {list = [1, 2, 3, 4, 5, 6];constructor() {makeAutoObservable(this, {filterList: computed,});}// 修改原数组changeList = () => {this.list.push(7, 8, 9);};// 定义计算属性get filterList() {return this.list.filter((item) => item > 4);}
}const counter = new CounterStore();export default counter;

使用 store

  1. 在组件中导入 counterStore 实例对象
  2. 在组件中使用 storeStore 实例对象中的数据
  3. 通过事件调用修改数据的方法修改 store 中的数据
  4. 让组件响应数据变化
// 导入counterStore
import counterStore from "./store";
// 导入observer方法
import { observer } from "mobx-react-lite";
function App() {return (<div className="App">{/* 原数组 */}{JSON.stringify(counterStore.list)}{/* 计算属性 */}{JSON.stringify(counterStore.filterList)}<button onClick={() => counterStore.changeList()}>change list</button></div>);
}
// 包裹组件让视图响应数据变化
export default observer(App);

异步处理数据

  1. 在 mobx 中编写异步请求方法 获取数据 存入 state 中
  2. 组件中通过 useEffect + 空依赖 触发 action 函数的执行
// 异步的获取import { makeAutoObservable } from "mobx";
import axios from "axios";class ChannelStore {channelList = [];constructor() {makeAutoObservable(this);}// 只要调用这个方法 就可以从后端拿到数据并且存入channelListsetChannelList = async () => {const res = await axios.get("http://XXX");this.channelList = res.data.channels;};
}
const channlStore = new ChannelStore();
export default channlStore;
import { useEffect } from "react";
import { useStore } from "./store";
import { observer } from "mobx-react-lite";
function App() {const { channlStore } = useStore();// 1. 使用数据渲染组件// 2. 触发action函数发送异步请求useEffect(() => {channlStore.setChannelList();}, []);return (<ul>{channlStore.channelList.map((item) => (<li key={item.id}>{item.name}</li>))}</ul>);
}
// 让组件可以响应数据的变化[也就是数据一变组件重新渲染]
export default observer(App);

模块化

  1. 拆分模块 js 文件,每个模块中定义自己独立的 state/action
  2. 在 store/index.js 中导入拆分之后的模块,进行模块组合
  3. 利用 React 的 context 的机制导出统一的 useStore 方法,给业务组件使用

1. store/taskStore.js

import { makeAutoObservable } from "mobx";class TaskStore {taskList = [];constructor() {makeAutoObservable(this);}addTask() {this.taskList.push("vue", "react");}
}const task = new TaskStore();export default task;

2. store/counterStore.js

import { makeAutoObservable } from "mobx";class CounterStore {count = 0;list = [1, 2, 3, 4, 5, 6];constructor() {makeAutoObservable(this);}addCount = () => {this.count++;};changeList = () => {this.list.push(7, 8, 9);};get filterList() {return this.list.filter((item) => item > 4);}
}const counter = new CounterStore();export default counter;

3. 整合导出统一方法 store/index.js

import React from "react";import counter from "./counterStore";
import task from "./taskStore";class RootStore {constructor() {this.counterStore = counter;this.taskStore = task;}
}const rootStore = new RootStore();// context机制的数据查找链  Provider如果找不到 就找createContext方法执行时传入的参数
const context = React.createContext(rootStore);const useStore = () => React.useContext(context);export { useStore };

4. 组件中使用

import { observer } from "mobx-react-lite";
// 导入方法
import { useStore } from "./store";
function App() {// 得到storeconst store = useStore();return (<div className="App"><button onClick={() => store.counterStore.addCount()}>{store.counterStore.count}</button></div>);
}
// 包裹组件让视图响应数据变化
export default observer(App);
http://www.yayakq.cn/news/173342/

相关文章:

  • 松阳建设局网站wordpress框架解密
  • 郑州做网站优化外包深圳罗湖企业网站优化价格
  • 域名注册了如何做网站专门做销售招聘网站
  • 怎么开始做网站哪些网站是用vue做的
  • 有没有大人和小孩做的网站凡客手机网站怎么建设
  • 建设一个招聘网站大概多少费用汕头h5模板建站
  • 南阳网站运营招聘信息熊掌号接合网站做seo
  • 计算机专业设计一个网站宁波seo费用
  • 哈尔滨双城区建设局网站域名注册查询站长工具
  • 网站设计建设维护龙岗招聘网
  • 写作网站排名p2p借贷网站开发 论文
  • 办公用品网站建设策划书wordpress如何自动采集网站图片
  • 上海知名网站开发公司攀枝花市住房和城乡建设局网站
  • 辽阳高端网站建设公司做网站需要找什么客户
  • 网站开发语言有什么要求农机网站模版
  • 高仿做的好点的网站h5网站怎么访问
  • 直播平台网站开发工程公司招聘
  • 做购物商城网站设计广州番禺区怎么样
  • 铁威马怎样做网站服务器免费申请个人邮箱
  • 网站加载百度地图建筑面积计算规范2023下载最新版
  • 电商网站建设求职定位建设部证书公布网站
  • 南京网站做的好的公司网站转app免费
  • wordpress 网站加载过慢资深网站如何做可以收取客户月费
  • 上海做网站 公司 哪家好网站建设项目的网络图
  • 网站开发实践实验教程产品开发流程8个步骤图
  • 泰安高新区建设局网站网站建设客户需求分析调研表
  • 网站开发培训班商城网站建设网络公司
  • 天津网站制作培训wordpress 小视频模板
  • 安全联盟可信任网站认证 网站中国十大电商公司排名
  • 漫画驿站网页设计图纸尺寸大小广州做网站信息