前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在vue中使用jsx

在vue中使用jsx

作者头像
阿超
发布2022-08-21 14:14:26
5240
发布2022-08-21 14:14:26
举报
文章被收录于专栏:快乐阿超快乐阿超

首先是官方文档

vue2的:https://cn.vuejs.org/v2/guide/render-function.html#JSX

vue3的:https://v3.cn.vuejs.org/guide/render-function.html#jsx

我们这里以vue2举例:

先使用render函数写一个最简单的jsx组件

代码语言:javascript
复制
<script>
export default {
    render() {
        return <div>Hello World</div>
    }
}
</script>

<style>
</style>

注意此处不能有template标签,其他的该咋用就咋用

还有的区别在这个链接里:https://github.com/vuejs/jsx#installation

如果有react的基础,上手这个就很容易啦

代码语言:javascript
复制
<div id="ul" class="ul">
    {Array.from({ length: 20 }, (i, len) => (
        <div class="li">
            <div class={"mar mar" + len}>
                <span class="checkbox"></span>
                <input type="checkbox" />
            </div>
        </div>
    ))}
</div>

注意要使用v-html时,应更换为

代码语言:javascript
复制
<p domPropsInnerHTML={html} />

其他类似的按照链接内容中即可

Babel Preset JSX

Configurable Babel preset to add Vue JSX support. See the configuration options here.

Compatibility

This repo is only compatible with:

Installation

Install the preset with:

代码语言:javascript
复制
npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props

Then add the preset to babel.config.js:

代码语言:javascript
复制
module.exports = {
  presets: ['@vue/babel-preset-jsx'],
}

Syntax

Content

代码语言:javascript
复制
render() {
  return <p>hello</p>
}

with dynamic content:

代码语言:javascript
复制
render() {
  return <p>hello { this.message }</p>
}

when self-closing:

代码语言:javascript
复制
render() {
  return <input />
}

with a component:

代码语言:javascript
复制
import MyComponent from './my-component'

export default {
  render() {
    return <MyComponent>hello</MyComponent>
  },
}

Attributes/Props

代码语言:javascript
复制
render() {
  return <input type="email" />
}

with a dynamic binding:

代码语言:javascript
复制
render() {
  return <input
    type="email"
    placeholder={this.placeholderText}
  />
}

with the spread operator (object needs to be compatible with Vue Data Object):

代码语言:javascript
复制
render() {
  const inputAttrs = {
    type: 'email',
    placeholder: 'Enter your email'
  }

  return <input {...{ attrs: inputAttrs }} />
}

Slots

named slots:

代码语言:javascript
复制
render() {
  return (
    <MyComponent>
      <header slot="header">header</header>
      <footer slot="footer">footer</footer>
    </MyComponent>
  )
}

scoped slots:

代码语言:javascript
复制
render() {
  const scopedSlots = {
    header: () => <header>header</header>,
    footer: () => <footer>footer</footer>
  }

  return <MyComponent scopedSlots={scopedSlots} />
}

Directives

代码语言:javascript
复制
<input vModel={this.newTodoText} />

with a modifier:

代码语言:javascript
复制
<input vModel_trim={this.newTodoText} />

with an argument:

代码语言:javascript
复制
<input vOn:click={this.newTodoText} />

with an argument and modifiers:

代码语言:javascript
复制
<input vOn:click_stop_prevent={this.newTodoText} />

v-html:

代码语言:javascript
复制
<p domPropsInnerHTML={html} />

Functional Components

Transpiles arrow functions that return JSX into functional components, when they are either default exports:

代码语言:javascript
复制
export default ({ props }) => <p>hello {props.message}</p>

or PascalCase variable declarations:

代码语言:javascript
复制
const HelloWorld = ({ props }) => <p>hello {props.message}</p>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Babel Preset JSX
    • Compatibility
      • Installation
        • Syntax
          • Content
          • Attributes/Props
          • Slots
          • Directives
          • Functional Components
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档