1.0.0 • Published 4 years ago

wx-uni-h5 v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

项目运行

    tnpm install 
    // 项目启动会选择对应请求转发的服务器,非特殊情况(例如线上才能复现的bug),请尽量不要选择线上服务器        
    tnpm run start

不要使用React State来传递业后台数据,只用来控制当前组件的数据

单页面内跳转不允许使用a标签进行页面跳转,所有页面跳转请使用标签

目录说明

Mobx + React + React-Router

根Component目录(如果有新项目启动,会各个项目之间通过submodule共享,本目录下组件严禁耦合任何后端请求数据)

页面结构

每个页面的结构由Layout + Router组成

layout为公共template,一般不需要单独开发,若需要单独开发layout,请参考目录中已有的实现

大多数开发只需要开发Router即可

基本开发

1.声明路由和路由的组成

    // 根路由暂时不作任何使用 / 跟路由会重定向到 路由的第一个页面
    // 页面真正的访问路径由 rootPath 和 route.path组成
    // model为此结构数据来源
    
    export default [
    {
            path: "/h5/404",
            component: createComponent("NotFount")
    },
    {
            path: "/h5",
            component: createComponent("EmptyLayout"),
            routes: [
                    {
                            path: "/result/success",
                            component: createComponent("ResultPage"),
                            model: require("Router/ResultPage/model"),
                    },
                    {
                            path: "/uni-add-admin",
                            component: createComponent("UniAddAdmin"),
                            model: require("Router/UniAddAdmin/model"),
                    },
                    {
                            path: "/edit",
                            component: createComponent("UniAddAdmin"),
                            model: require("Router/UniAddAdmin/model"),
                    }
            ]
    }
    ] 

默认为非layout类型的页面,每个页面单独一个路由;

如果需要添加layout,可以使用嵌套路由的方式,例如:

        export default [
                {
                        path: "/uni-layout",
                        component: createComponent("UniLayout"),
                        model: require("Layout/UniLayout/model"),
                        routes: [
                                {
                                        path: "/uni-add-admin",
                                        component: createComponent("UniAddAdmin"),
                                        model: require("Router/UniAddAdmin/model"),
                                }
                        ]
                }
        ] 
  1. Router声明规范 例如需要建一个Login的页面,在Router文件目录下声明
        Login(文件夹)
                Login.js
                Login.css
                model.js
                
    login.js 为页面组件部分

    //页面样式为cssModule的使用方式,局部样式,命名方式完全自由化,更多详情参考css-module
    import React, {Component} from "react";
    import {observer, inject} from "mobx-react";
    import {dispatch} from "Utils/observe";
    import styles from "./Login.css";

    @inject("login") //注入的数据结构,可以传递多个,参数名称和modle中的namespace的value一致
    @observer
    export default class extends Component {
            componentDidMount() {
                    //分发的事件名称为 namespace + "/" + model.js中声明的函数名称
                    dispatch("login/getLogin", {
                            test: 123
                    });
            }

            render() {
                    console.log(this.props.login)

                    return <div className={style.login}>login</div>
            }
    }

    Login.css 页面样式,不解释

    modle.js

    export default {
            //请命名保持跟文件夹一致
            namespace: "login",

            //对应的数据结构,请注意设计好该页面需要使用的数据结构
            //使用mobx @inject注入此数据结构
            state: {
                    qrcode: null
            },

            //改变数据结构的方法,返回promise对象
            //promise对象返回和state对应结构需要改变的数据结构新值
            //对应的组件会自动触发变化
            //通过dispatch函数触发(非dispath函数触发不会触发页面刷新)
            //args-1: 为dispatch的所传递的参数
            getLogin(args-1) {
                    return new Promise((resolve, reject) => {
                            resolve({
                                    qrcode: "123"
                            });
                    }).then((data) => {
                            return {
                                    qrcode: data.qrcode
                            };
                    });
            }
    }
  1. Mobx-React 核心方法

    import {observer, inject} from "mobx-react";
    import {dispatch} from "Utils/observe";
    
    observer将React组件变为可观测
    inject将所对应model注入
    dispatch触发对应model数据的变化
    
    使用方式参考2
  1. Utils说明

所有的工具方法,请直接引用Utils如若遇见没有的工具方法也请简单封装utils

尽可能不要直接在项目中直接引用第三方工具库源码(非UI库),目前已经封装request请求(基于axios)和 dispath工具方法

  1. Todo

[] 新建页面的cli