首页 > 其他分享 >2018_11_02_02

2018_11_02_02

时间:2024-10-08 22:34:22浏览次数:9  
标签:02 11 return name render default 2018 components id

jsx

JSX这部分内容是在参考文章:在 vue 中使用 jsx 语法中提炼出来的,就是跟着敲代码跑了一遍.基本就明白了

什么是 JSX?


JSX 就是 Javascript 和 XML 结合的一种格式。React 发明了 JSX,利用 HTML 语法来创建虚拟 DOM。当遇到<,JSX 就当 HTML 解析,遇到{就当 JavaScript 解析.

使用 template

// item.vue
<template>
<template>
 <div>
   <h1 v-if="id===1">
     <slot></slot>
   </h1>
   <h2 v-if="id===2">
     <slot></slot>
   </h2>
   <h3 v-if="id===3">
     <slot></slot>
   </h3>
   <h4 v-if="id===4">
     <slot></slot>
   </h4>
 </div>
</template>

<script>
   export default {
       name: "item",
       props:{
         id:{
           type:Number,
           default:1
         }
       }
   }
</script>

class,style,ref

render (h) {
  return (
    <div
      // normal attributes or component props.
      id="foo"
      // DOM properties are prefixed with `domProps`
      domPropsInnerHTML="bar"
      // event listeners are prefixed with `on` or `nativeOn`
      onClick={this.clickHandler}
      nativeOnClick={this.nativeClickHandler}
      // other special top-level properties
      class={{ foo: true, bar: false }}
      style={{ color: 'red', fontSize: '14px' }}
      key="key"
      ref="ref"
      // assign the `ref` is used on elements/components with v-for
      refInFor
      slot="slot">
    </div>
  )
}

V-APP

<template>
  <div id="app">
     <h-title :id="id">Hello World</h-title>
    <button @click="next">下一个</button>
    <h-title2 :id="id">Hello World</h-title2>
    <vif :id="id">Hello World</vif>
    <vfor></vfor>
    <vmodel></vmodel>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';
import Title from './components/item';
import Title2 from './components/item2';
import vif from './components/vif';
import vfor from './components/vfor';
import vmodel from './components/vmodel';

export default {
  name: 'app',
  data() {
    return {
      id: 1,
    };
  },
  components: {
    HelloWorld,
    'h-title': Title,
    'h-title2': Title2,
    vif: vif,
    vfor: vfor,
    vmodel: vmodel,
  },
  methods: {
    next() {
      if (this.id === 6) {
        this.id = 1;
      }
      ++this.id;
    },
  },
};
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

v-for

<script>
export default {
  name: 'vif',
  data() {
    return {
      show: false,
      list: [1, 2, 3, 4],
    };
  },
  render() {
    return (
      <div>
        {this.list.map((v) => {
          return <p>{v}</p>;
        })}
      </div>
    );
  },
};
</script>

v-if

<script>
export default {
  name: 'vif',
  props: {
    id: {
      type: Number,
      default: 1,
    },
  },
  render() {
    const hText = `<h${this.id}>${this.$slots.default[0].text}</h${this.id}>`;
    let ifText;
    if (this.id > 3) {
      ifText = <p>你帅</p>;
    } else {
      ifText = <p>你丑</p>;
    }
    return (
      <div>
        <div domPropsInnerHTML={hText} />
        <hr />
        <div>{this.id > 3 ? '你帅' : '你丑'}</div>
        <hr />
        <div>{ifText}</div>
      </div>
    );
  },
};
</script>

v-model

<script>
export default {
  name: 'item',
  data() {
    return {
      show: false,
      list: [1, 2, 3, 4],
      text: '',
    };
  },
  methods: {
    inputss(e) {
      this.text = e.target.value;
    },
  },
  render() {
    return (
      <div>
        <input type="text" value={this.text} onInput={this.inputss} />
        <p>{this.text}</p>
      </div>
    );
  },
};
</script>

函数式组件

<script>
//父组件
 //...省略无关代码
render(){
  return (
    <Item data={this.data} class="large"/>
  )
}
//Item.vue组件
export default {
  functional:true,
  name: "item",
  render(h,context){
    return (
      <div class="red" {...context.data}>
        {context.props.data}
      </div>
    )
  }
}
</script>

click

// 父组件
methods:{
  show(){
    alert('你好')
  }
},
render(){
  return (
    <Item data={this.data} onNativeClick={this.show} class="large"/>
  )
}

作者:fantasy525

链接:https://juejin.im/post/5affa64df265da0b93488fdd

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:02,11,return,name,render,default,2018,components,id
From: https://www.cnblogs.com/honghaitao/p/18453197

相关文章

  • 2018_11_02_01
    ES5&ES6写法对照表(react)来源:ReactonES6+React/ReactNative的ES5ES6写法对照表class定义语法值得注意的是,我们已经删除了两个括号和一个后缀分号,而对于每个声明的方法,我们都省略了一个冒号,一个function关键字和一个逗号。classPhotoextendsReact.Component......
  • 2018_10_28_01
    动态替换图片最简单的示例<divclass="img-wrapper"><divonclick='replacement'><imgsrc='[图片1]'></div><!-----------------><!--忽略同类型代码.--><!----------------->......
  • NewStar2024-week1
    前言:刚开始比赛,时间比较多尝试了一下所有题目,难度也很友好,之后就写密码了,写全部太累了Week1CryptoBase4C4A575851324332474E324547554B494A5A4446513653434E564D444154545A4B354D45454D434E4959345536544B474D5134513D3D3D3D秒了一眼秒了p,q相近或者factordb查"""fro......
  • NOIP2024集训 Day47 总结
    前言人有两次生命,当他意识到只有一次的时候,第二次生命就开始最小生成树和二分图匹配专题,感觉总体都比较套路。但是这些套路为啥感觉见都没见过啊,怪不得做这么慢。色观察到对于最终答案显然都是最小生成树上一条两个端点颜色不同的边。而这个题并不会改变图的形态,仅仅是改......
  • Cornell cs3110 - Chapter9 Lessons
    使用Menhir构建SimPL的编译器LexerandParser语法分析模块Lexer,Parser,AST是三个依次耦合的模块,可以这么描述三者的关系:Lexer---tokens-->Parser---nodes-->AST相对于上面的图像化描述,cs3110反过来构建整个Lexer和Parser的结构在ast.ml中,定义了AST上......
  • CSP2024-33
    2A题意:给定一个01串,每次可以循环移动一个子串,求多少次操作使整串有序(升序)。每次操作至多使极大全1段个数减一:111100001111\(\to\)000011111111。数一下一开始有多少全1段,判断一下最后一个元素是否是1即可。submissionA题意:给定\(n,m,a,b,k\),求满足\(ax+by=k,\x,......
  • YOLO11改进 | 注意力机制 | 反向残差注意力机制
     秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • YOLO11改进 | 注意力机制 | 十字交叉注意力机制CrissCrossAttention【含目标检测,语义
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • NOIP2024集训Day47 生成树+二分图
    NOIP2024集训Day47生成树+二分图B.[THUPC2022初赛]最小公倍树直接建边显然不行,考虑优化建边。对于两个点\(u,v\),\((u,v)\)的边权为\(\displaystyle\operatorname{lcm}(u,v)=\frac{u\timesv}{\gcd(u,v)}\),显然应该选择\(\gcd(u,v)\)尽可能大的点对连边,也就是......
  • CSP2024 前集训:csp-s模拟10
    前言T2赛时不会,T3没有想到移项遂打了个背包得\(50pts\),T4又放回滚莫队板子,结过开太晚了没打完,以后板子麻烦放靠前点谢谢。T1需要线性基思想,听5k讲完貌似懂了,但是学了再回来补吧。T2首先选择一个度数不是\(1\)的点当根。对于一个非叶子节点\(p\)被扫到有两种情况......