React技术栈支援Vue项目,你需要提前了解的 | 京东云技术团队
写在前面
- react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听, 当属性变化的时候,响应式的更新对应的虚拟dom
- react的思路通过js来生成html, 所以设计了jsx,还有通过js来操作css。vue是自己写了一套模板编译的逻辑,可以把js css html糅合到一个模板里边
- react可以通过高阶组件来扩展,而vue需要通过mixins来扩展
频繁用到的场景
1. 数据传递:父传子,父更新子如何取得新数据
父组件中有一个表单日期组件,子组件是一个弹层(弹层中有日期组件,默认值取父组件选中的日期),父组件更改日期范围后,子组件打开默认日期也需要更新。如下:
// 父组件 <template> <div> <date-span style="flex-grow: 1" ref="dateSpanE" :noCache="true" :startDate="startDate" :endDate="endDate" type="weekrange" @change="changeDate"></date-span> <!-- 子弹层组件 --> <ActiveTakeEffect ref="activeModal" :timeRange="makeActiveTime" /> </div> </template> <script> import DateSpan from '@/components/DateSpanE' export default { components: { DateSpan }, // ... data: () => { return { makeActiveTime: { startDate: '', endDate: '' }, } }, computed: { startDate() { return this.makeActiveTime.startDate }, endDate() { return this.makeActiveTime.endDate } }, methods: { // 父组件表单日期修改时更新了传入的日期 changeDate(dateInfo) { const { start: startDate, end: endDate } = dateInfo this.makeActiveTime = { startDate, endDate } } } } </script>
// 子组件 <template> <Modal v-model="showModal" width="680" title="XXX" :mask-closable="false" @on-visible-change="visibleChange" :loading="loading"> <div class="single-effect-modal"> <div class="form-wrapper"> <date-span style="flex-grow: 1" ref="dateSpanE" :noCache="true" :startDate="startDate" :endDate="endDate" type="weekrange" @change="changeDate"></date-span> </div> </div> </Modal> </template> <script> import Api from '@/api_axios' import DateSpan from '@/components/DateSpanE' import { formatDate } from '@/common/util' import moment from 'moment' export default { components: { DateSpan }, props: { // 定义父组件传入的prop timeRange: { type: Object, default: () => { return { startDate: new Date(), endDate: moment().add(17, 'w').toDate() } } } }, data() { return { loading: true, showModal: false, // data中定义子组件日期范围组件所需的展示数据,默认取props中定义的值 timeRangeFromProps: this.timeRange } }, computed: { startDate() { return this.timeRangeFromProps.startDate }, endDate() { return this.timeRangeFromProps.endDate } }, watch: { // 监听传入的props值,props值更改时更新子组件数据 // 若无此监听,父组件修改日期后,子组件的日期范围得不到更新 timeRange() { this.timeRangeFromProps = this.timeRange } }, methods: { changeDate(dateInfo) { const { start: startDate, end: endDate } = dateInfo this.timeRangeFromProps = { startDate, endDate } }, toggle(isShow) { this.showModal = isShow }, // ... } } </script> <style lang="less"> .single-effect-modal { .form-wrapper { min-height: 100px; } .item-label { min-width: 60px; } } </style>
2. $parent
$refs
$emit
2.1 $refs
访问子组件中的方法或属性
<ActiveTakeEffect ref="activeModal" :timeRange="makeActiveTime" /> <script> this.$refs.activeModal.timeRangeFromProps // timeRangeFromProps是子组件中的属性 this.$refs.activeModal.toggle(true) // toggle是子组件中的方法名 </script>
2.1 $parent
访问父组件中的方法或属性 $emit
触发父组件中定义的方法
// 子组件 <script> this.$parent.makeActiveTime // makeActiveTime是父组件中的属性 this.$parent.changeDate({startDate:xxx, endDate: xxx}) // changeDate是父组件中的方法名 </script>
// 父组件,忽略其他项 <date-span @conditionChange="conditionChange"></date-span> <scipt> // ... methods: { conditionChange(controlName) { // ... } } // ... </script> <script> // 子组件中调用 this.$emit('conditionChange', 'dateSpan') </script>
3. mixins扩展使用
// itemList就是来自treeSelectMixin中定义的数据 <SwitchButton :itemList="itemList" @change="toggleSelectAll"></SwitchButton> <script> import mixin from './treeSelectMixin' export default { mixins: [mixin], components: { Treeselect, SwitchButton }, // ... } </script>
4. 样式的两种写法
// 同一个.vue文件中可以出现以下两个style标签 <style lang="less"> </style> // 当 `<style>` 标签有 `scoped` 属性时,它的 CSS 只作用于当前组件中的元素。 <style lang="less" scoped> </style>
以上就是入门时困扰较多的地方~祝换乘顺利
作者:京东保险 黄晓丽
来源:京东云开发者社区 转载请注明来源

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何在 Vue中引入原子设计?
前言 原子设计是一种创建设计系统的方法,它将用户界面分解为可重用的小组件,即: Atoms 原子 Molecules 分子 Organisms 生物体 Templates 模板 Pages 页面 通过遵循模块化设计方法,原子设计可帮助团队创建一致、可缩放且可维护的 UI。 在这篇文章中,小编将探讨如何在 Vue 中实现原子设计。下文将从 Atomic Design 的基础知识开始,然后演示如何在 Vue.js 中应用其原理。 原子设计由五个级别组成,表示 UI 的构建基块。对于此示例,小编创建了一个倒置树结构,以可视化每个解剖结构的连接方式。 原子 Atoms 原子是 UI 的最小单元,无法在不失去其含义的情况下进一步分解。原子的示例包括图标、按钮、标签、输入和排版。 在 Vue.js 中,原子可以创建为可重用的组件,这些组件接受 props 来自定义它们的外观和行为。 TextboxAtom <template> <div class="component-wrapper" data-name="textBoxAtom"> <label>{{ la...
- 下一篇
通过Python脚本支持OC代码重构实践(一):模块调用关系分析
作者 | 刘俊启 导读 在软件开发中,经常会遇到一些代码问题,例如逻辑结构复杂、依赖关系混乱、代码冗余、不易读懂的命名等。这些问题可能导致代码的可维护性下降,增加维护成本,同时也会影响到开发效率。这时通常通过重构的方式对已有代码结构进行改进和优化。在重构的工作中,大部分的工作是人工的方式完成,是一个耗时且容易出错的过程。对于研发人员来讲,在不改变软件的功能和行为的前提下,保证质量和效率完成对已有功能的重构,是一个极大的挑战。本文以Python实现自动化的工具,支持代码重构过程的实践。 全文7641字,预计阅读时间20分钟。 在软件开发中,经常会遇到一些代码问题,例如逻辑结构复杂、依赖关系混乱、代码冗余、不易读懂的命名等。这些问题可能导致代码的可维护性下降,增加维护成本,同时也会影响到开发效率。 这时通常通过重构的方式,在不改变软件的功能和行为的前提下,对软件的代码进行重新组织和优化。达到增强代码的可读性,降低维护成本,提升研发效率和质量的目的。通过合理的重构,可以大大提高软件的可维护性和可扩展性,从而延长其生命。 本系列的内容介绍了百度App搜索侧业务如何使用Python脚本实现自动化...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器