当前位置:网站首页>dvajs的基础介绍及使用
dvajs的基础介绍及使用
2022-07-06 18:05:00 【闲鱼_JavaScript】
目录结构:
1. 同步操作修改仓库值
- src/models/LhTest.ts:你定义仓库的地方
export default {
// 仓库存值;
state: {
global: '这是global',
},
// 同步操作地方:修改组件公用状态
reducers: {
// 这是你修改state的方法;固定格式
changeGlobal(state: Object, {
payload }: any) {
console.log('这是你通过payload传递过来的参数:', payload)
return {
...state,
global: payload,
};
},
},
};
- src/pages/index.tsx:页面调用
import {
connect } from 'dva';
import {
Button } from 'antd';
import React,{
useState } from 'react';
const IndexPage = (props: any) => {
// 从props中解构出 global 和 dispatch 方法
const {
global, dispatch } = props;
const [numb, setNumb] = useState(0);
const changeGlobal = (numb:any) => {
setNumb(numb + 1)
// 这个方法是在props里面
dispatch({
// type: '你定义的model名字,默认是你的文件名,也可以自定义: namespace'
// type: / 后面是你的方法名字,会从 effects 或者 reducers 里面去找;如果名字相同则再effects中找(也就是 effects 中首先找;找到则结束这个方法寻找);
type: 'LhTest/changeGlobal',
// 这个地方是你传参的地方!
payload: numb++
})
}
return (
<>
<Button onClick={
changeGlobal.bind({
}, numb)}>ce {
global }</Button>
</>
);
}
// 这一步 你可以这么理解,在 IndexPage 页面创建的前一步,dva给它加了一步操作就是connect传入的第一个回调函数。
export default connect((state: any) => {
// LhTest 是 modal名称 默认是文件名字或者是你自己定义的 namespace ;
const {
global } = state.LhTest;
return {
global
};
// connect()这个函数返回了一个函数 接受一个即将渲染的页面;
})(IndexPage);
2. 异步操作修改仓库值
- src/models/LhTest.ts:你定义仓库的地方
import {
request } from 'umi';
// data 为传递过来的参数
const user = (data:any) => {
return request(`/user`, {
method: 'POST',
// 头部信息
headers: {
},
// json格式
requestType: 'json',
// post 请求是用data, get请求是用params
data
});
}
export default {
// 仓库存值;
state: {
global: '这是global',
},
// 同步操作地方:修改组件公用状态
reducers: {
// 这是你修改state的方法;固定格式;调用的时候 '模块名字/方法名'
changeGlobal(state: Object, {
payload }: any) {
console.log('这是你通过payload传递过来的参数:', payload)
return {
...state,
global: payload,
};
},
// 为了测试 effects 的 put 方法而写的
handleSomethingReducers(state: Object, {
payload }: any) {
console.log('reducers方法触发,payload:', payload)
return {
...state
}
}
},
// 异步操作地方:请求接口
effects: {
// 方法名,调用的时候 '模块名字/方法名'
// payload: 你传递过来的参数;
*getUserInfo({
payload }: any, {
call, put }: any) {
// call:异步请求的函数接受两个参数(第一个【user】:异步调用的函数【请求接口】第二个【payload】:给你的异步函数传入参数进去)
// 返回接口信息
const {
data } = yield call(user, payload);
// 调用其他方法(比如说 reducers里面的 或者是effects里面的,或者其他。)
yield put({
type: 'handleSomethingReducers', payload: {
name: 1 } }); // reducers方法触发,payload: {name: 1}
yield put({
type: 'handleSomethingEffects', payload: {
name: 2 } }); // effects方法触发,payload: {name: 2}
},
// 为了测试 effects 的 put 方法而写的
*handleSomethingEffects({
payload}:any, {
call, put}: any) {
console.log('effects方法触发,payload:', payload)
}
},
};
- src/pages/index.tsx:页面调用
import {
connect } from 'dva';
import {
Button } from 'antd';
import React,{
useState } from 'react';
const IndexPage = (props: any) => {
// 从props中解构出 global 和 dispatch 方法
const {
global, dispatch } = props;
const [numb, setNumb] = useState(0);
const changeGlobal = (numb:any) => {
setNumb(numb + 1)
// 这个方法是在props里面
dispatch({
// type: '你定义的model名字,默认是你的文件名,也可以自定义: namespace'
// type: / 后面是你的方法名字,会从 effects 或者 reducers 里面去找;如果名字相同则再effects中找(也就是 effects 中首先找;找到则结束这个方法寻找);
type: 'LhTest/changeGlobal',
// 这个地方是你传参的地方!
payload: numb++
})
dispatch({
type: 'LhTest/getUserInfo',
// 这个地方是你传参的地方!
payload: {
name: 'zs',
age: '46'
}
})
}
return (
<>
<Button onClick={
changeGlobal.bind({
}, numb)}>ce {
global }</Button>
</>
);
}
// 这一步 你可以这么理解,在 IndexPage 页面创建的前一步,dva给它加了一步操作就是connect传入的第一个回调函数。
export default connect((state: any) => {
// LhTest 是 modal名称 默认是文件名字或者是你自己定义的 namespace ;
const {
global } = state.LhTest;
return {
global
};
// connect()这个函数返回了一个函数 接受一个即将渲染的页面;
})(IndexPage);
3. 命名空间
- 可以弄多个文件夹,它会默认读取文件名字作为 默认的 namespace;
- 模块化自定义名字,正常都是以文件名字为模块,但是当名字重复了呢?会报错!那就使用命名空间 namespace 自定义吧
解决方案如下:
添加 namespace 后
未添加namespace
打印一下最终结果呢:connect((state)=> {console.log(‘state:’, state)})(IndexPage)
3.xxxx(放假了,待续…)
边栏推荐
- hdu 4661 Message Passing(木DP&amp;组合数学)
- 各种语言,软件,系统的国内镜像,收藏这一个仓库就够了: Thanks-Mirror
- c语言—数组
- 【信号与系统】
- Using the entry level of DVA in taro3.*
- Yunna | work order management software, work order management software app
- 【芯片方案设计】脉搏血氧仪
- [case sharing] basic function configuration of network loop detection
- Neon Optimization: About Cross access and reverse cross access
- [signal and system]
猜你喜欢
2022 Google CTF SEGFAULT LABYRINTH wp
Comparison of picture beds of free white whoring
C language - array
黑马笔记---异常处理
JTAG principle of arm bare board debugging
AcWing 345. 牛站 题解(floyd的性质、倍增)
一起看看matlab工具箱内部是如何实现BP神经网络的
如何管理分布式团队?
According to the analysis of the Internet industry in 2022, how to choose a suitable position?
Typical problems of subnet division and super network construction
随机推荐
负载均衡性能参数如何测评?
Yunna | work order management software, work order management software app
AcWing 1140. 最短网络 (最小生成树)
How to evaluate load balancing performance parameters?
Metauniverse urban legend 02: metaphor of the number one player
JS reverse -- ob confusion and accelerated music that poked the [hornet's nest]
云呐|工单管理办法,如何开展工单管理
Dark horse notes - create immutable sets and streams
域分析工具BloodHound的使用说明
HMM notes
[advanced C language] 8 written questions of pointer
2022 Google CTF SEGFAULT LABYRINTH wp
Gnet: notes on the use of a lightweight and high-performance go network framework
The difference between Tansig and logsig. Why does BP like to use Tansig
[chip scheme design] pulse oximeter
Wood extraction in Halcon
What are the differences between Oracle Linux and CentOS?
安利一波C2工具
JTAG debugging experience of arm bare board debugging
Install Firefox browser on raspberry pie /arm device