- 解决的问题:作为子组件,可以根据父组件的某个变量,输出多个相同或者不同的
html
模板。- 比如有这样一个需求页面:
tabbar
下内容每一个红色框内为一种 html
模板,不同险种或者不同性质内容, html
模板不同,方法1是定义4个组件,达到显示多个相同的模板A和其它多个不同的html模板,官网的说法是这样代码冗长,提供的简单方法2是 render
函数,方法3是 JSX
语法。 * render
函数可以理解为 JS
语法生成 html
模板,感觉用起来没有 JSX
顺手,不是很好理解。 * JSX
语法简单可以理解为 JS
里面混用 html
语法生成 html
模板,简单易用易理解。 * 好处就是方法1简化为一个组件,这个组件相当于一个 html
模板制造工厂,根据需要(变量)产出不同 html
模板,也可以是多个重复 html
模板。 JSX
jsx
语法依赖Babel
插件编译,不然无法识别会报错。需要配置
npm installbabel-plugin-syntax-jsxbabel-plugin-transform-vue-jsxbabel-helper-vue-jsx-merge-propsbabel-preset-env--save-dev复制代码
//.babelrc文件配置{"presets": ["env"],"plugins": ["transform-vue-jsx"],}复制代码
- 父组件template代码
//sfmui框架内组件上拉加载更多、下拉刷新复制代码 //JSX语法子组件{ {loadMoreTip}} //无数据时占位图暂无进行中的需求哦
- 子组件不需要template代码,因为JSX其实是代替了template渲染html,所以只需要js和styel代码
复制代码
- 备注:
return
括号内html
模板必须要有一个根标签,同template
规则 - 思路:将后台返回
Array/Object
格式数据在父组件利用v-for
循环,item
对象传入子组件,子组件根据变量insuranceType
值判断最终渲染成何种html模板。更复杂场景可利用computed
及method
等选项控制。