vue使用render渲染&jsx
vue&jsx文档
vue实例属性
// App.ts
import hBtn from './components/hBtn'
import hUl from './components/hUl'
export default {
data(){
return {
theme: "mdui-theme-pink",
accent: "mdui-theme-accent-pink",
users:['aoo', 'boo', 'coo']
}
},
methods:{
},
render(h){
return h('div',{
'class':[this.theme, this.accent],
attrs:{
id: 'app'
}
},[
h(hBtn,{
'class':['mdui-color-theme-accent']
}),
h('ul',{},
[
h('li',{
'class':{
'text-danger':true
},
style:{
color:'red';
}
} ,'start'),
this.users.length
? this.users.map((key, index)=>{
return h('li',key)
})
: h('li','v-if else 这样写')
,
h('li', 'end')
]
),
h(hUl,{
attrs:{
users:['user1', 'user2']
}
})
]);// return end
}, //render end
}
// src/components/hBtn.ts
var Text = {// 在内部定义了一个组件
props:['body'],
render(h){
return h('span',[this.body])
}
}
export default {
data(){
return {
myName: "ajanuw"
}
},
methods:{
echo (num:number):void {
alert(num)
}
},
mounted(){
console.log( '组件渲染完成!!')
},
render(h) {
return h(
'button',
{
// 和`v-bind:class`一样的 API
'class':['mdui-btn'],
style: {// 定义 style
fontSize: '22px'
},
attrs:{// 定义attribute, 可以利用这个更组件传递 props
id: "ajanuw"
},
domProps: {// DOM 属性
// innerHTML 会替换组件内部的赋值
},
on: {
click: this.echo.bind(null, 1995)
}
},
[
h(Text, {attrs:{body:"this a "},ref: 'start'} ),
h(Text, {attrs:{// 使用text组件, 传递props
body:this.myName}, ref: 'end'} )
]
);
}
}
// src/components/hUl.ts
// 渲染一个列表
var list = {
props:['body']
render(h){
return h('li', this.body)
}
};
export default {
props:['users'],
render(h){
if(this.users){
if(this.users.length){
return h('ul',{},[
this.users.map((key, index)=>{
return h(list,{
attrs:{
body: key
}
})
})
])
}else{
return h('ul', {}, [
return h(list, {
attrs:{
body: "没有数据哦!"
}
})
])
}
}
}, //render end
}
下面是jsx
vue init webpack vueJsx
cd vueJsx
npm install babel-plugin-syntax-jsx babel-plugin-transform-vue-jsx babel-helper-vue-jsx-merge-props babel-preset-env --save-dev
npm i
npm start
// .babelirc
{
"presets": ["env"],
"plugins": ["transform-vue-jsx"]
}
// App.js
var Text = {
props:['body'],
render(h){
return(
<p
onClick={ ()=> console.log( this.body)}
style={{color:'red'}}
>
hello {this.body}
</p>
);// return end
}
}
var List = {
props:['body'],
render(h){
return (
<li onClick={()=> console.log( this.body)}>{ this.body}</li>
);
}
}
export default {
data(){
return {
name:"ajanuw",
users: ['aoo', 'boo']
}
},
methods:{
echo(name){
alert( name)
}
},
render(h){
return (
<div id="app">
<Text body={this.name}/>
<ul>
{
this.users.length !==0
? this.users.map((key, index)=>{
return <List body={key} key={index}/>
})
: <li>没有数据</li>
}
</ul>
</div>
);// return end
}, // render end
}
"vue": "^2.5.2" 发现自带 jsx 模块。。。
把App.vue 改成 App.js 文件
// App.js
export default {
data(){
return {
name: 'ajanuw'
}
},
render(){
return (
<div id="app">
<p>hello {this.name}</p>
</div>
)
}
}
// main.js
import App from './App' => import App from './App.js'
vue使用render渲染&jsx的更多相关文章
- Vue之render渲染函数和JSX的应用
一.模板缺陷 模板的最大特点是扩展难度大,不易扩展.可能会造成逻辑冗余 <Level :type="1">哈哈</Level> <Level :typ ...
- Vue.js 2.x render 渲染函数 & JSX
Vue.js 2.x render 渲染函数 & JSX Vue绝大多数情况下使用template创建 HTML.但是比如一些重复性比较高的场景,需要运用 JavaScript 的完全编程能力 ...
- Render渲染函数和JSX
1.Render函数:render是用来替换temlate的,需要更灵活的模板的写法的时候,用render. 官网API地址:https://cn.vuejs.org/v2/guide/render- ...
- 理解Vue中的Render渲染函数
理解Vue中的Render渲染函数 VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数.比如如下我想要实现 ...
- vue render 渲染函数
vue render 渲染函数 经常看到使用render渲染函数的示例,而且在一些特殊情况下,确实更好使用,可以更加有效地细分组件,因而借助vue-element-admin来学习一波 render函 ...
- vue+element ui table组件封装,使用render渲染
后台管理经常会用到表格,一开始封装了一个常用的功能性表格,点击这里: 后来由于需求增加,在表格中还会用到switch,select,input等多种组件,每次都要在html中增加<el-tabl ...
- vue用template还是JSX?
各自特点 template 模板语法(HTML的扩展) 数据绑定使用Mustache语法(双大括号) <span>{{title}}<span> JSX JavaScript的 ...
- Egg + Vue 服务端渲染工程化实现
在实现 egg + vue 服务端渲染工程化实现之前,我们先来看看前面两篇关于Webpack构建和Egg的文章: 在 Webpack工程化解决方案easywebpack 文章中我们提到了基于 Vue ...
- Vue 服务端渲染(SSR)
什么是服务端渲染? 简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. 服务端渲染的优点 更好的SEO,搜索引 ...
随机推荐
- centos7安装配置mysql5.6
1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-co ...
- (亲测解决)每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档
版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/sinat_34104446/article/details/80210424 一.问题描述每次打开Exce ...
- EBS测试环境DataGuard配置
1.环境信息 primary数据库(必须运行在归档模式) ip 127.71.28.71 sid test db_unique_name test log_mode archivelog force_ ...
- Oracle 12c pdb的数据泵导入导出
12c推出了可插拔数据库,在一个容器cdb中以多租户的形式同时存在多个数据库pdb.在为pdb做数据泵导入导出时和传统的数据库有少许不同. 1,需要为pdb添加tansnames ...
- epoll源码分析
epoll源码分析 最近在使用libev过程中遇到一个场景:一个fd从一个ev_loop迁移到另一个ev_loop,会出现这个fd同时存在两个epoll的瞬间.不禁要问了,一个fd同时被两个epoll ...
- C#中Post请求的两种方式发送参数链和Body的
POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...
- GCD 之线程死锁
GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能. 如此强大的工具用不好可能会出现线程死锁. 如下代码: - (void)viewDidLoad { [super vie ...
- 一篇文章掌握RequireJS常用知识
本文采取循序渐进的方式,从理论到实践,从RequireJS官方API文档中,总结出在使用RequireJS过程中最常用的一些用法,并对文档中不够清晰具体的内容,加以例证和分析,分享给大家供大家参考,具 ...
- 用Python来玩微信跳一跳
微信2017年12月28日发布了新版本,在小程序里面有一个跳一跳小游戏,试着点一点玩了下.第二天刚好在一篇技术公众号中,看到有大神用Python代码计算出按压时间,向手机发送android adb命令 ...
- oracle中decode的用法(例子)
使用结构: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN ...