zoukankan      html  css  js  c++  java
  • mota

    在类式组件中,使用@model()

    在函数式组件中,使用 useModel()

    useModel(参数1,参数2)
    参数1:
    参数2:显式的声明额外的依赖
            数组:数组中是显式声明的依赖,格式为子成员的路径,如下
        function Demo(){
            const { info } = useModel({ 
            info: { name: 'test'} 
            }, ['info.name']);
            ...
            return <Info data={info}/>
            }
        函数:函数的参数是「变化的模型数据的路径」,可参函数中返回 boolean 值决定是否需要更新组件,如下
        function Demo(){
            const { info } = useModel({ 
            info: [{name: 'test1'}] 
            }, p=> p.endsWith('.name'));
            ...
            return <Info data={info}/>
    }

     

    属性映射?

    组件属性和模型数据?如何映射?

    @model和@mapping实现了父子组件传值?

     

    自执行函数和监听模型变化

    @autorun

    @watch(参数一,参数二)

    这两个用法都是用来装饰组件的成员方法

    区别是:

    • autorun 会自动收集依赖,而 watch 不会关心组件方法中有何依赖,需要手动指定依赖的模型数据
    • watch 默认不会「自动执行」,需显式的指定「立即执行参数为 true」,才会自动执行首次。
    • autorun 依赖的是「模型数据」本身,而 watch 依赖的是「计算函数」每次的「计算结果」

    @watch有两个参数:第一个参数是一个函数,只有当函数返回的结果发生变化时,装饰的方法才会自动执行一次。第二个参数为true的时候,watch监听的方法可以自动执行一次

    @autorun 会自动收集装饰方法中用到的依赖,只有当依赖发生变化的时候,才会自动执行这个方法

    import { Component } from 'react';
    import { model, autorun } from 'mota';
    import DemoModel from './models/demo';
    
    @model(DemoModel)
    export default Demo extends Component {
        // 这个test函数中的依赖是model.name,当这个依赖发生变化的时候,会自动执行test方法
      //在挂载结束之后会自动执行一次
      @autorun
      test() {
        console.log(this.model.name);
      }
    
    }
    export default Demo extends Component {
        // 还有当第一个参数中函数返回的值发生变化的时候才会执行test函数,当第二个参数为true的时候会自动执行一次函数
      @watch(model=>model.name,true)
      test() {
        console.log('name 发生变化');
      }
    
    }




    遇到的问题:

    在react项目中加入mota时,如果只通过mota文档安装,之后并不能直接通过@model的方式来使用mota,报错信息是不能使用装饰器,

    Support for the experimental syntax 'decorators-legacy' isn't currently enabled

    百度需要运行npm run eject命令,但运行这个命令后还是报错,百度说是没有安装好git,或者是安装了但需要提交到仓库

    然后百度如何把代码推送到码云仓库

    先在码云新建一个仓库
    clone新建的码云仓库到本地
    在本地创建一个react应用
    使用git init命令初始化本地仓库
    要将本地仓库和远程的码云仓库关联起来
    然后把本地仓库推送到远程
    注意 git push origin 本地分支名字:远程分支名字
    git push origin master:origin/master

    推送成功之后,运行npm run eject命令,可以运行成功

    运行成功之后需要安装eslint赖声川eslintrc.json文件,

    npm install eslint -g

    eslint --init

    在文件中需要配置"legacyDecorators": true 选项

     

    之后就可以使用mota装饰器

     

     

     

    不同的元素发生重叠会影响下面元素的作用

    比如我的文字太长覆盖了前面的勾选框,导致我没办法勾选,还以为是程序逻辑出了什么问题,

     
  • 相关阅读:
    Python修饰符实践
    回文
    Linux下安装Qt
    Linux下安装PyQT
    Python闭包实践
    杂乱
    windows下脚本转到linux下,文件保存格式要转换
    lua table.sort的bug
    shell截取某段
    coredump
  • 原文地址:https://www.cnblogs.com/ccv2/p/14960835.html
Copyright © 2011-2022 走看看