当前位置:网站首页>Using the entry level of DVA in taro3.*
Using the entry level of DVA in taro3.*
2022-07-07 01:17:00 【yunchong_ zhao】
If you use dva do react Project status management , It's not so cool , This is the latest To do a small program , Do not use native development , I chose taro frame , To develop applets ,
But I still want to use state management dva What shall I do? . In fact, it can still be used
Students, please continue to look down
Blogger's taro The version is 3.4 Of course It is relatively new
1, A good workman does his work well , You must sharpen your tools first Before the start , We installed a lot of things
yarn add react-redux redux dva-core dva-loading --save
Then start the configuration
stay src Create one under the file models Folder
Let me take a classic example here . Just explain the counter as the status
models/index.js models/count.js I created two files
models/index.js
import count from './count'
export default [count]
models/count.js Here are some examples Modify synchronously and asynchronously
export default {
namespace: "count",
state: {
count: 11112,
},
effects: {
* AsyncChangeCount(_, {
put }) {
const value = yield new Promise((resolve) => {
setTimeout(() => {
resolve(2)
}, 2000)
})
yield put({
type: "changeCount",
payload: {
count: value
}
})
}
},
reducers: {
setCount(state) {
state.count += 1;
return {
...state };
},
changeCount(state, {
payload }) {
state.count = payload.count
return {
...state }
}
},
};
Then is dva Tool files for
In your utils Under the document Create a dva.js In fact, it is used here The way other big guys write But let's say everything In fact, they are almost This is just a little encapsulated No big problem
import {
create } from 'dva-core'
import createLoading from 'dva-loading'
let app,store,dispatch;
function createApp (opt) {
// redux journal
// opt.onAction = [createLogger()];
app = create(opt)
app.use(createLoading({
}))
if (!global.registered) opt.models.forEach(model => app.model(model))
global.registered = true
app.start()
store = app._store
app.getStore = () => store
dispatch = store.dispatch
app.dispatch = dispatch
return app
}
export default {
createApp,
getDispatch () {
return app.dispatch
},
getState: () => store.getState()
}
The play is app.js Configuration in
import {
Component } from 'react'
import {
Provider } from "react-redux";
import dva from "./utils/dva"
import models from './models';
import './app.scss'
const dvaApp = dva.createApp({
initialState: {
},
models,
});
const store = dvaApp.getStore();
class App extends Component {
// this.props.children Is the page that will be rendered
render () {
return <Provider store={
store}>{
this.props.children }</Provider>
}
}
export default App
The above is that the configuration is completed . Then start using... In the component .
After all, now react yes hooks The era of the I also use hooks Let's take an example
The core is from react-redux There are two hooks Everything else adds up class Type usage is similar
import { useSelector, useDispatch } from ‘react-redux’
import {
View } from "@tarojs/components";
import {
useState } from "react";
import {
AtButton } from "taro-ui";
// Introduce on demand taro-ui
import "taro-ui/dist/style/components/button.scss";
import "taro-ui/dist/style/components/loading.scss";
import {
useSelector, useDispatch } from 'react-redux'
import './index.scss'
export default () => {
const [count, setCount] = useState(0);
const count1 = useSelector(state => state.count.count)
const dispatch = useDispatch();
return (
<View>
<View>component state: {
count }</View>
<View>redux data: {
count1 } </View>
<View className='h100'></View>
<AtButton type='primary' loading size='small' onClick={
() => setCount(count + 1)}>click change state </AtButton>
<View className='h100'></View>
<AtButton type='primary' loading size='small' onClick={
() => dispatch({
type: "count/setCount"})}>click change redux</AtButton>
<View className='h100'></View>
<AtButton type='primary' loading size='small' onClick={
() => dispatch({
type: "count/AsyncChangeCount"})}> Asynchronous modification redux The number </AtButton>
</View>
);
};
That's it . Continue to use dva stay taro I'm very happy .
Follow me to keep updating Front end knowledge .
边栏推荐
- Rainstorm effect in levels - ue5
- ESP Arduino (IV) PWM waveform control output
- BFS realizes breadth first traversal of adjacency matrix (with examples)
- Let's see through the network i/o model from beginning to end
- Case development of landlord fighting game
- 斗地主游戏的案例开发
- Installation of gazebo & connection with ROS
- The cost of returning tables in MySQL
- Part VI, STM32 pulse width modulation (PWM) programming
- How to evaluate load balancing performance parameters?
猜你喜欢
ESP Arduino (IV) PWM waveform control output
ARM裸板调试之JTAG原理
[case sharing] basic function configuration of network loop detection
Activereportsjs 3.1 Chinese version | | | activereportsjs 3.1 English version
免费白嫖的图床对比
"Exquisite store manager" youth entrepreneurship incubation camp - the first phase of Shunde market has been successfully completed!
微信公众号发送模板消息
【JVM调优实战100例】05——方法区调优实战(下)
Tensorflow GPU installation
[batch dos-cmd command - summary and summary] - jump, cycle, condition commands (goto, errorlevel, if, for [read, segment, extract string]), CMD command error summary, CMD error
随机推荐
资产安全问题或制约加密行业发展 风控+合规成为平台破局关键
Neon Optimization: performance optimization FAQ QA
Gazebo的安装&与ROS的连接
Atomic in golang and CAS operations
Spark TPCDS Data Gen
Taro2.* 小程序配置分享微信朋友圈
c语言—数组
Part VI, STM32 pulse width modulation (PWM) programming
2022 Google CTF SEGFAULT LABYRINTH wp
ARM裸板调试之JTAG调试体验
Build your own website (17)
Activereportsjs 3.1 Chinese version | | | activereportsjs 3.1 English version
安全保护能力是什么意思?等保不同级别保护能力分别是怎样?
JTAG debugging experience of arm bare board debugging
深度学习框架TF安装
[100 cases of JVM tuning practice] 05 - Method area tuning practice (Part 2)
ARM裸板调试之JTAG原理
C # method of calculating lunar calendar date 2022
Make a simple graphical interface with Tkinter
BFS realizes breadth first traversal of adjacency matrix (with examples)