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

这篇具有很好参考价值的文章主要介绍了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>


以上就是入门时困扰较多的地方~祝换乘顺利

作者:京东保险 黄晓丽

来源:京东云开发者社区 转载请注明来源文章来源地址https://www.toymoban.com/news/detail-711042.html

到了这里,关于React技术栈支援Vue项目,你需要提前了解的的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三大前端技术(React,Vue,Angular)

    React(也被称为React.js或ReactJS)是一个用于构建用户界面的JavaScript库。它由Facebook和一个由个人开发者和公司组成的社区来维护。 React可以作为开发单页或移动应用的基础。然而,React只关注向DOM渲染数据,因此创建React应用通常需要使用额外的库来进行状态管理和路由,Red

    2024年02月09日
    浏览(42)
  • 025python-怎么处理一个用例需要用到前面一条用例返回结果里面的某些值的依赖关系

    第一种:放到setup里面,每次请求时在setup里面重新请求前面一条用例 1、创建一个http_request请求测试类 2、创建测试用例类 1、学习反射内容 2、创建一个反射类 3、创建一个测试用例类 4、执行测试用例,获取报告

    2024年02月05日
    浏览(32)
  • 新项目如何选择vue和react

    vue 和 react 的区别 Vue 和 React 都是流行的前端框架,它们有以下不同点: 语法和模板:Vue 使用类似于 HTML 的模板语法,而 React 使用 JSX 语法,在 JavaScript 中嵌入 HTML 标记。 组件化:Vue 和 React 都采用了组件化的思想,但是 Vue 的组件化更加彻底,一个 Vue 组件包括了 HTML 模板

    2024年02月02日
    浏览(41)
  • 竟然可以在一个项目中混用 Vue 和 React?

    React和Vue是前端开发中的两大热门框架,各自都有着强大的功能和丰富的生态系统。然而,你有没有想过,在一个项目中同时使用React和Vue?是的,你没有听错,可以在同一个项目中混用这两个框架!本文就来分享 3 个用于混合使用 React 和 Vue 的工具! Veaury 是一个基于 React

    2024年02月08日
    浏览(33)
  • 前端(二十七)——封装指南:Axios接口、常用功能、Vue和React中的封装技术

    😊博主:小猫娃来啦 😊文章核心: 前端封装指南:Axios接口、常用功能、Vue和React中的封装技术 在我们前端开发当中,封装是种将代码和功能组织起来以便重复使用的方式。它可以使开发人员更高效地编写、维护和管理代码。本文将探讨前端封装的定义、重要性以及在Web开

    2024年02月05日
    浏览(33)
  • 【Vue全家桶】带你全面了解通过Vue CLI初始化Vue项目

    🫡这里是前端程序员小张 🌟创作不易,希望各位大佬支持一下 什么是Vue脚手架? 在真实开发中我们不可能每一个项目从头来完成所有的 webpack配置,这样显示开发的效率会大大的降低; 所以在真实开发中,我们通常会使用脚手架来创建一个项目,Vue的项目我们使用的就是

    2023年04月09日
    浏览(33)
  • vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】

    说明 (1) 项目中有一些如注册/登陆表单, 在提交请求前是需要进行表单输入数据校验的 (2) 只有前台表单验证成功才会发请求 (3) 如果校验失败, 以界面红色文本的形式提示, 而不是用alert的形式 (4) 校验的时机, 除了点击提交时, 还有输入过程中实时进行校验 版本兼容: 使用步

    2023年04月09日
    浏览(25)
  • vue/react项目刷新页面出现404的原因以及解决办法

    问题描述:vue/react项目,正常的页面操作跳转,不会出现404的问题,但是一旦刷新,就会出现404报错。 产生原因:我们打开vue/react打包后生成的dist文件夹,可以看到只有一个 index.html 文件及一些静态资源,这个是因为vue/react是单页应用(SPA),只有一个index.html作为入口文件,

    2024年02月06日
    浏览(41)
  • AI问答:前端需要掌握的设计模式/vue项目使用了哪些设计模式/vue项目开发可以使用哪些设计模式

    一、理解什么是设计模式 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。 设计模式是一个在软件设计领域中被广泛应用的概念,它指的是一套被公认为有效的解决特定问题的设计思路和方法。 设计模式更多的是指导思想和方法论,而不是现成的代码

    2024年02月09日
    浏览(48)
  • 深入了解Vue-loader: 优化Vue.js项目开发的利器

      Vue-loader是一个用于加载Vue组件的webpack插件。它允许你编写单文件组件(SFC),并将它们转换为JavaScript模块,以便在浏览器中使用。这个工具非常有用,因为它可以帮助你在开发过程中更好地组织和管理你的Vue组件。 如何安装:  安装完毕后,你需要在webpack配置文件中添

    2024年01月17日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包