写在前面

  • 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>

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

作者:京东保险 黄晓丽

来源:京东云开发者社区 转载请注明来源

React技术栈支援Vue项目,你需要提前了解的的更多相关文章

  1. 重谈react优势——react技术栈回顾

    react刚刚推出的时候,讲react优势搜索结果是几十页. 现在,react已经慢慢退火,该用用react技术栈的已经使用上,填过多少坑,加过多少班,血泪控诉也不下千文. 今天,再谈一遍react优 ...

  2. react技术栈实践(2)

    本文来自网易云社区 作者:汪洋 这时候还没完,又有两个问题引出来了. 按照上面的配置,第三方库 antd 竟然也被编译了,导致样式失败. react中,一旦包裹了子组件,子组件没办法直接使用 styl ...

  3. react技术栈实践(1)

    本文来自网易云社区 作者:汪洋 背景 最近开发一个全新AB测试平台,思考了下正好可以使用react技术开发. 实践前技术准备 首先遇到一个概念,redux.这货还真不好理解,大体的理解:Store包含 ...

  4. React技术栈梳理

    一.react是什么? react是一个js框架,可以用它来编写html页面,使用react后我们可以完全抛弃html(只需要一个主index文件),而用纯js来编写页面: 二.为什么要使用react ...

  5. React技术栈——Redux

    Redux 1.Redux是什么?   Redux对于JavaScript应用而言是一个可预测状态的容器.换言之,它是一个应用数据流框架,而不是传统的像underscore.js或者AngularJs ...

  6. 深入React技术栈之初入React世界

    1.1 react简介 react并不是完整的MVM/MVVM框架,专注于提供清晰.简洁的View层解决方案. 传统开发模式,要更新页面需要手动操作DOM元素.如图1.1所示,React在DOM上封装 ...

  7. 深入react技术栈解读

    1. react实现virtual DOM ,如果要改变页面的内容,还是需要执行DOM操作,比原生操作DOM多了virtualDOM的操作(计算,对比等), 应该是更耗性能??? 2. react特点 ...

  8. 深入React技术栈之setState详解

    抛出问题 class Example extends Component { contructor () { super() this.state = { value: 0, index: 0 } } ...

  9. H5页面开发笔记(react技术栈)

    1.子组件接收父组件的参数,要在子组件的componentDidMount函数中更改当前组件的state,若写在componentWillMount函数中,则会导致初始化界面UI的时候不能得到预期的效 ...

  10. 一个基于React整套技术栈+Node.js的前端页面制作工具

    pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...

随机推荐

  1. 【Python】数据可视化利器PyCharts在测试工作中的应用

    PyCharts 简介 PyCharts 是一个基于 Python 的数据可视化库,它支持多种图表类型,如折线图.柱状图.饼图等.PyCharts 提供了简洁的 API,使得用户能够轻松地创建各种图表 ...

  2. go语言全景俯瞰

    本篇是语言教学的"传统项目".每个写go语言教学的人,都会介绍它的发展历程,应用领域,优缺点和特点来介绍自己的理由.当然如果你有自己的理解,那就更好了,欢迎讨论! 全景简介 go语 ...

  3. ubuntu 安装sublime

    Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key ad ...

  4. 交换分区swap的创建与管理

    前言 swap分区是linux系统中一块特殊的硬盘空间,当实际内存不够用的时候,系统会按照一定的算法将部分不用的数据放在swap分区中,从而为当前运行的程序腾出足够的内存空间.好处在于避免内存资源不足 ...

  5. 【go笔记】使用sqlx操作MySQL

    前言 go在操作MySQL时,可以使用ORM(比如gorm.xorm),也可以使用原生sql.本文以使用sqlx为例,简单记录步骤. go version: 1.16 安装相关库 # mysql驱动 ...

  6. 从浅入深了解.NET Core MVC 2.x全面教程【第二章】

    二.Logging 1.诊断中间件 命名空间:Microsoft.AspNetCore.Diagnostics 报告信息并处理异常 2.诊断中间件 UseDeveloperExceptionPage: ...

  7. Dokcer学习之旅(2)——Dockerfile基础应用

    什么是Dockerfile? 从docker commit 的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本, ...

  8. ATtiny88初体验(一):点灯

    ATtiny88初体验(一):点灯 最近逛淘宝时,发现一块ATtiny88核心板(MH-ET LIVE Tiny88)用完红包后只剩4块钱了,果断下单,准备好好把玩一番. MH-ET LIVE Tin ...

  9. c++算法之离散化

    什么是离散化? 离散化,故离散数学,其中的"离散"就是不连续的意思.离散化可以保持原数值之间相对大小关系不变的情况下将其映射成正整数. 也就是给可能用到的数值按大小关系分配一个编号 ...

  10. SpringBoot3.x原生镜像-Native Image实践

    前提 之前曾经写过一篇<SpringBoot3.x 原生镜像-Native Image 尝鲜>,当时SpringBoot处于3.0.0-M5版本,功能尚未稳定.这次会基于SpringBoo ...