当前位置:首页 > 科技  > 软件

React技术栈支援Vue项目,你需要提前了解的

来源: 责编: 时间:2023-10-26 17:12:08 177观看
导读写在前面react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听, 当属性变化的时候,响应式的更新对应的虚拟domreact的思路

写在前面

  • react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听, 当属性变化的时候,响应式的更新对应的虚拟dom
  • react的思路通过js来生成html, 所以设计了jsx,还有通过js来操作css。vue是自己写了一套模板编译的逻辑,可以把js css html糅合到一个模板里边
  • react可以通过高阶组件来扩展,而vue需要通过mixins来扩展

频繁用到的场景

1. 数据传递:父传子,父更新子如何取得新数据

父组件中有一个表单日期组件,子组件是一个弹层(弹层中有日期组件,默认值取父组件选中的日期),父组件更改日期范围后,子组件打开默认日期也需要更新。如下:yRi28资讯网——每日最新资讯28at.com

// 父组件<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>

以上就是入门时困扰较多的地方~祝换乘顺利yRi28资讯网——每日最新资讯28at.com

作者:京东零售 黄晓丽yRi28资讯网——每日最新资讯28at.com

来源:京东云开发者社区 转载请注明来源yRi28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15225-0.htmlReact技术栈支援Vue项目,你需要提前了解的

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 别再学那些落后的 Web 开发技术了 !

下一篇: 分布式实时处理系统的架构设计,工作原理和实现方式

标签:
  • 热门焦点
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • 十个可以手动编写的 JavaScript 数组 API

    十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 得物效率前端微应用推进过程与思考

    得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人&ldquo;珍藏&rdquo;是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
  • Android 14发布:首批适配机型公布

    Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
Top