写在前面

  • 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. httpx的两个坑(httpx.ReadTimeout; SSL: CERTIFICATE_VERIFY_FAILED)

    关于python异步网络请求库httpx的两个坑 其一:httpx.ReadTimeout 实测发现,网络不稳定的情况下,极其容易出现该错误. 相对于requests库, httpx库是有默认的超时时 ...

  2. 在VS Code 中调试远程服务器的PHP代码

    背景 对于PHP的调试,一般来说我们用 echo 和 var_dump 就够用了. 有时会碰到要解决复杂的逻辑或需要确认代码的运行顺序,这里用var_dump效率就比较低了,这时建议用断点的方式进行代 ...

  3. 即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建

    2月5日,全球云通讯服务商ZEGO即构科技发布低代码互动平台 LCEP(Low-code Engagement Platform)产品 RoomKit,支持1V1在线课堂.小班课.大班课.视频会议.视 ...

  4. Unity自定义类使用携程--自身不继承MonoBehaviour

    [TOC] 参考: https://www.jianshu.com/p/67f498cb839b 话不多说,直接上代码 1 using System.Collections; 2 using Unit ...

  5. rsync 命令

    linux上的rsync命令详解 15个rsync命令实施 -z: --compress 使用压缩机制 -v: --verbose 打印详细信息 -r: --recursive 以递归模式同步子目录 ...

  6. python2.7源码安装方式

    安装python2.7 下载Python 2.7, 下载地址 解压安装 tar -xzvf Python-2.7.15.tgz cd Python-2.7.15 ./configure --prefi ...

  7. 使用ClamAV进行linux病毒扫描

    前言 ClamAV是一个在命令行下查毒(并非杀毒)的软件,其免费开源跨平台.ClamAV默认只能查出服务器内的病毒,但是无法清除,最多删除. 安装ClamAV yum install -y epel- ...

  8. ubuntu20.4操作指令合集

    每个指令前面尽量加上sudo,避免麻烦的权限问题 下载软件:sudo apt install 包名 开启/关闭防火墙(开启/关闭所有端口):sudo ufw enable/disable 防火墙状态: ...

  9. Vue的数据更新,页面不更新的解决办法

    可能原因 更新的数据跟源数据不是同一个,即不是同一个引用 解决办法 最稳妥的办法,可通过拿到源数据取索引的方式进行数据的更新,如: 有一个源数据叫:originData 那么如果在更新时,通过this ...

  10. 《SQL与数据库基础》15. 触发器

    目录 触发器 语法 示例-insert型触发器 示例-update型触发器 示例-delete型触发器 本文以 MySQL 为例 触发器 触发器是与表有关的数据库对象,指在 insert/update ...