zoukankan      html  css  js  c++  java
  • taro 引入dva框架

    1、安装

        redux:
             cnpm install --save redux @tarojs/redux @tarojs/redux-h5 redux-thunk redux-logger
       dva:
             cnpm install --save dva-core dva-loading
           ps: dva-loading 与dva-core 是版本依赖的,如果安装dva-loading时出错,请按要求安装相应版本的dva-core, 如dva-core@1.6.0-beta.6 dva-loading@3.0.12
     
     
    2、配置dva,  src/utils/dva.js
         
    import Taro from '@tarojs/taro';
    import { create } from 'dva-core';
    // import { createLogger } from 'redux-logger';
    import "@tarojs/async-await";
    import createLoading from 'dva-loading';

    let app;
    let store;
    let dispatch;

    function createApp(opt) {
    // redux日志
    // opt.onAction = [createLogger()];
    app = create(opt);
    app.use(createLoading({}));

    // 适配支付宝小程序
    if (Taro.getEnv() === Taro.ENV_TYPE.ALIPAY) {
    global = {};
    }

    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;
    },
    };
      
    3、配置model,src/models/index.js
     
    //配置dvaApp的models
    import common from './common'

    //各个page的models都需要在这里"注册"
    export default [
    common
    ]
     
    4、引入dva,  src/app.js
     
    import Taro, { Component } from '@tarojs/taro'
    import '@tarojs/async-await'
    import { Provider } from "@tarojs/redux";
    import dva from './utils/dva'
    import models from './models';
    import Index from './pages/home'
    import './app.scss'
    //引入 taro-ui
    import 'taro-ui/dist/style/index.scss'
    // 如果需要在 h5 环境中开启 React Devtools
    // 取消以下注释:
    // if (process.env.NODE_ENV !== 'production' && process.env.TARO_ENV === 'h5') {
    // require('nerv-devtools')
    // }
    const dvaApp = dva.createApp({
    initialState: {},
    models: models,
    });
    const store = dvaApp.getStore();

    class App extends Component {

    config = {
    pages: [
    'pages/home/index'
    ],
    window: {
    backgroundTextStyle: 'light',
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: 'WeChat',
    navigationBarTextStyle: 'black'
    }
    }

    componentDidMount () {}
    componentDidShow () {}
    componentDidHide () {}
    componentDidCatchError () {}
    // 在 App 类中的 render() 函数没有实际作用
    // 请勿修改此函数
    render () {
    return (
    <Provider store={store}>
    <Index />
    </Provider>
    )
    }
    }
    Taro.render(<App />, document.getElementById('app'))
     
    5、配置action ,utils/action.js
     
    const action = (type, payload) => ({type, payload});

    export default action

    6、使用
     
         a、创建models,models/common.js
    import action from "../utils/action";
    import {request} from "../utils/request";

    export default {
    namespace: 'common',
    state: {
    list: []
    },
    reducers: {
    save(state, {payload}) {
    return {...state, ...payload};
    },
    },
    effects: {
    * load({payload}, {call, put}) {
    console.log("common",payload)
    let data = yield call(request,payload);
    console.log("response",data)
    yield put(action("save", {list: data}))
    },
    },
    };
     
        b、连接组件
    import Taro, { Component } from '@tarojs/taro'
    import { View, Text } from '@tarojs/components'
    import { AtTabBar } from 'taro-ui'
    import {connect} from '@tarojs/redux'
    import action from '../../utils/action'

    import './index.scss'

    @connect(({common, loading}) => ({
    ...common,
    isLoad: loading.effects["common/load"],
    }))
    export default class Index extends Component {
    config = {
    navigationBarTitleText: '热榜'
    }
    constructor() {
    super(...arguments)
    this.state={
    current: 0,

    }
    }
    componentDidMount () {

    const{dispatch}=this.props
    dispatch(action("common/load",{
    "svr_name": "AdDeviceMngSvr",
    "method_name": "GetDeviceSearchList",
    "req_body": {
    "iUid": 1,
    "sToken": ''
    }
    }));
    }}
     c、发起请求
       
    import Taro from '@tarojs/taro'
    import '@tarojs/async-await'

    export function request(params) {
    const data = JSON.stringify(params)
    const method = 'post'
    const url = 'https://www.xxx.cn/comm_route'
    const opt={
    data:data,
    method:method,
    url:url
    }
    return Taro.request(opt).then((res) => {
    console.log("res",res)
    let {statusCode, data} = res;
    if (statusCode >= 200 && statusCode < 300) {
    return data;
    } else {
    throw new Error(`网络请求错误,状态码${statusCode}`);
    }
    })
    }
     
  • 相关阅读:
    Linus Torvalds: 成功的项目源于99%的汗水与1%的创新
    web.py入门
    Python web框架有哪些
    python and 和 or
    python 安装ssh和Scrapy
    github使用
    github的.md格式文件
    python list comprehension twos for loop 嵌套for循环
    python 中函数参数传递形式
    python MySQLdb安装和使用
  • 原文地址:https://www.cnblogs.com/freely/p/14470922.html
Copyright © 2011-2022 走看看