Vue3中使用jsx的render函数

667 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

render描述:juejin.cn/post/699982…

jsx描述:juejin.cn/post/684668…

这里只是做简单应用

一.没有 jsx 的 render 函数

demo1

 创建函数式组件
<script>
import { createVNode } from 'vue'
export default {
  name: 'Hello',
  render () {
    // return createVNode(标签名, { 属性名: 属性值 }, 子节点)
    return createVNode('div', { id: 'box' }, 'hello')
  }
}
</script>

效果

image.png

控制台

image.png

demo2

    render () {
    // return createVNode(标签名, { 属性名: 属性值 }, 子节点)
    return createVNode('div', { id: 'box' }, [
      createVNode('p', {}, '我是一个段落1'),
      createVNode('p', {}, '我是一个段落2')
    ])
  }

效果

image.png

控制台

image.png

demo3

可使用数组的形式包裹子节点
      render () {
    // return createVNode(标签名, { 属性名: 属性值 }, 子节点)
    return createVNode('ul', {},[
      createVNode('li', {}, '111'),
      createVNode('li', {}, '222'),
      createVNode('li', {}, '333'),
      createVNode('li', {}, '444'),
    ])
  }

效果

image.png

控制台

image.png

二.有 jsx 的 render 函数

demo1

  render () {
    return <div>
      <p>我是一个段落1</p>
      <p>我是一个段落2</p>
    </div>
  }

效果

image.png

控制台

image.png

jsx中可以嵌套 js 的语法,但是需要用 {} 标记出来

demo2

注意函数的使用,及遍历数组使用map
   render() {
     var obj = {
       id: 1,
       name: "objName",
     };
     var arr = [1, 2];
     var flag = true
     var arr2 = [<li>1</li>, <li>2</li>];
     const clickFn = function (n) {
       console.log("clickFn" + n);
     };
   
     <input
          type="button"
          value="按钮"
          onClick={() => {
            clickFn(1);
          }}
        />
    
   return (
     <div>
       <input type="button" value="按钮0" onClick={clickFn} />
       <input type="button" value="按钮1" onClick={clickFn(1)} />
       <input type="button" value="按钮2" onClick={()=>{clickFn(2)}} />
       <h1>
         我是h1===={obj.name}==={arr}=={flag}
       </h1>
       <ul>
         {arr2}====
         {arr.map((item) => {
           return <li>{item}</li>; // [<li>1</li>,<li>2</li>,<li>3</li>]
         })}
       </ul>
     </div>
   );
 },

效果

image.png

按钮0点击生效,但是函数需要传参但是传不了

image.png

按钮1渲染立即生效,点击无效

image.png

按钮2点击生效

image.png