千家信息网

vue转react入门知识点有哪些

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章主要讲解了"vue转react入门知识点有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"vue转react入门知识点有哪些"吧!因为新公司
千家信息网最后更新 2025年01月25日vue转react入门知识点有哪些

这篇文章主要讲解了"vue转react入门知识点有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"vue转react入门知识点有哪些"吧!

因为新公司使用react技术栈,包括Umi、Dva、Ant-design等一系列解决方案。稍微熟悉一下之后,了解到虽然有些不同,但是还是大相径庭。以下我就以两个火热的框架react16&vue2(在积极学习vue3中)从设计、书写方式、API、生命周期及热门生态做一下简单的对比:

设计


reactvue说明
定位构建用户界面的js库渐进式框架react侧重于library,vue侧重于framework
渲染setState更新state的值来达到重新render视图响应式数据渲染,修改了响应式数据对应的视图也进行渲染react需要考虑何时setState,何时render;vue只需要考虑修改数据
编写方式jsxtemplatereact是函数式,all in js;vue区分tempalte、script、style,提供语法糖,使用vue-loader编译

组件通信

react:严格的单向数据流

  • 向下 props

  • 向上 props func

  • 多级传递 context

遵循万物皆可props,onChange/setState()

vue:单向数据流

  • 向下 props down

  • 向上 events up(订阅发布)

  • 多级传递 $attrs、$listeners

还有各种获取组件实例(VueComponent),如:$refs、$parent、$children;通过递归获取上级或下级组件,如:findComponentUpward、findComponentsUpward;高阶组件:provide/reject,dispatch/broadcast


reactvue说明
子组件数据传递propsprops都是声明式
组件状态机statedata管理组件的状态,react使用setState更改,vue直接赋值,新属性使用$set;vue使用函数闭包特性,保证组件data的独立性,react本就是函数

生命周期


reactvue说明
数据的初始化constructorcreated
挂载componentDidMountmounteddom节点已经生成
更新componentDidUpdateupdatedreact:组件更新完毕后,react只会在第一次初始化成功会进入componentDidmount,之后每次重新渲染后都会进入这个生命周期,这里可以拿到prevProps和prevState,即更新前的props和state。 vue:在数据更改导致的虚拟 DOM 重新渲染和更新完毕之后被调用
卸载componentWillUnmountdestroyed销毁事件

事件处理

react

  • React 事件的命名采用小驼峰式(camelCase),而不是纯小写

  • 使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串

  • 不能通过返回 false 的方式阻止默认行为。你必须显式的使用 preventDefault

  • 不能卸载非Element标签上,否则会当成props传下去

function Form() {  function handleSubmit(e) {    e.preventDefault();    console.log('You clicked submit.');  }  return (    
);}

vue

用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件

//原生事件
//自定义事件

vue事件修饰符:

  • .stop - 调用 event.stopPropagation()。

  • .prevent - 调用 event.preventDefault()。

  • .capture - 添加事件侦听器时使用 capture 模式。

  • .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。

  • .native - 监听组件根元素的原生事件。

  • .once - 只触发一次回调。

  • .left - (2.2.0) 只当点击鼠标左键时触发。

  • .right - (2.2.0) 只当点击鼠标右键时触发。

  • .middle - (2.2.0) 只当点击鼠标中键时触发。

  • .passive - (2.3.0) 以 { passive: true } 模式添加侦听器

class和style

class

react

render() {  let className = 'menu';  if (this.props.isActive) {    className += ' menu-active';  }  return Menu}

vue

style

react

vue

组件样式的时候你可以在style标签上声明一个scoped来作为组件样式隔离标注,如:。最后打包时其实样式都加入一个hash的唯一值,避免组件间css污染

条件渲染

  • react:jsx表达式, &&或者三元表达式;return false表示不渲染

  • vue:表达式返回true被渲染,可嵌套多个v-else-if,v-else

列表渲染

react:使用.map,一个元素的 key 最好是这个元素在列表中拥有的一个独一无二的字符串

    {props.posts.map((post) =>
  • {post.title}
  • )}

vue:为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key attribute

  • {{ item.message }}
  • 组件嵌套

    react

    默认插槽

    {props.children}

    具名插槽

    {props.left}
    {props.right}
    } right={} />

    vue

    默认插槽

    具名插槽

    获取DOM

    react:管理焦点,文本选择或媒体播放。触发强制动画。集成第三方 DOM 库

    class MyComponent extends React.Component {  constructor(props) {    super(props);    this.myRef = React.createRef();  }  render() {    return 
    ; }}

    vue:被用来给元素或子组件注册引用信息

    hello
    this.$refs.p.offsetHeight

    文档结构

    Umi

    ├── config                   # umi 配置,包含路由,构建等配置│   ├── config.ts            # 项目配置.umirc.ts优先级更高,使用此方式需要删除.umirc.ts│   ├── routes.ts            # 路由配置│   ├── defaultSettings.ts   # 系统配置│   └── proxy.ts             # 代理配置├── mock                     # 此目录下所有 js 和 ts 文件会被解析为 mock 文件├── public                   # 此目录下所有文件会被copy 到输出路径,配置了hash也不会加├── src│   ├── assets               # 本地静态资源│   ├── components           # 业务通用组件│   ├── e2e                  # 集成测试用例│   ├── layouts              # 约定式路由时的全局布局文件│   ├── models               # 全局 dva model│   ├── pages                # 所有路由组件存放在这里│   │   └── document.ejs     # 约定如果这个文件存在,会作为默认模板│   ├── services             # 后台接口服务│   ├── utils                # 工具库│   ├── locales              # 国际化资源│   ├── global.less          # 全局样式│   ├── global.ts            # 全局 JS│   └── app.ts               # 运行时配置文件,比如修改路由、修改 render 方法等├── README.md└── package.json

    vue_cli

    ├── mock                       # 项目mock 模拟数据├── public                     # 静态资源│   └── index.html             # html模板├── src                        # 源代码│   ├── api                    # 所有请求│   ├── assets                 # 主题 字体等静态资源│   ├── components             # 全局公用组件│   ├── directive              # 全局指令│   ├── filters                # 全局 filter│   ├── layout                 # 全局 layout│   ├── router                 # 路由│   ├── store                  # 全局 store管理│   ├── utils                  # 全局公用方法│   ├── views                  # views 所有页面│   ├── App.vue                # 入口页面│   └── main.js                # 入口文件 加载组件 初始化等├── tests                      # 测试├── vue.config.js              # vue-cli 配置如代理,压缩图片└── package.json               # package.json

    路由

    动态路由&路由传参

    react-router

    • history.push(/list?id=${id})

    • history.push({pathname: '/list', query: {id}})

    • history.push(/list/id=${id})

    • history.push({pathname: '/list', params: {id}})

    获取 props.match.query / props.match.params

    vue-router

    • this.$router.push({path: '/list', query: {id}})

    • this.$router.push({path: '/list', params: {id}})

    获取 this.$router.query / this.$router.params

    嵌套路由

    -react

    {  path: '/',  component: '@/layouts/index',  routes: [    { path: '/list', component: 'list' },    { path: '/admin', component: 'admin' },  ],}
    { props.children }

    使用props.children渲染子路由

    vue-router

    {  path: '/user/:id',  component: User,  children: [    {      path: 'profile',      component: UserProfile    },    {      path: 'posts',      component: UserPosts    }  ]}

    使用vue原生组件/组件渲染子路由

    路由跳转

    umi

    Profilehistory.push(`/list?id=${id}`)

    vue

    Aboutthis.$router.push({path: '/list', query: {id}})

    路由守卫(登录验证,特殊路由处理)

    • Umi

    • vue-router

    全局路由守卫

    全局前置守卫:router.beforeEach

     const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => {   // ... })

    全局后置守卫:router.beforeEach

     router.afterEach((to, from) => {   // ... })

    状态管理

    多个视图依赖于同一状态或来自不同视图的行为需要变更同一状态;才需要使用状态管理机。


    dvavuex说明
    模块namespacemodules解决应用的所有状态会集中到一个比较大的对象,store对象可能变得相当臃肿
    单一状态树statestate唯一数据源
    提交状态机reducermutations用于处理同步操作,唯一可以修改 state 的地方
    处理异步操作effectsaction调用提交状态机更改状态树

    使用

    dva: model connect UI

    // new model:models/products.jsexport default {  namespace: 'products',  state: [],  reducers: {    'delete'(state, { payload: id }) {      return state.filter(item => item.id !== id);    },  },};//connect modelexport default connect(({ products }) => ({  products,}))(Products);//dispatch model reducedispatch model reduce({  type: 'products/delete',  payload: id,})

    如有异步操作,如ajax请求,dispath model effects,然后effects调用model reduce
    vuex

    // new moduleconst store = new Vuex.Store({  state: {    count: 1  },  mutations: {    increment (state) {      state.count++    }  },  actions: {    increment (context) {      context.commit('increment')    }  }})//bind UI//commit module mutation store.commit('increment')

    如有异步操作,如ajax请求,dispath module actions,然后actions调用module mutations

    store.dispatch({  type: 'incrementAsync',  amount: 10})

    感谢各位的阅读,以上就是"vue转react入门知识点有哪些"的内容了,经过本文的学习后,相信大家对vue转react入门知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

    组件 路由 全局 事件 状态 数据 配置 元素 文件 知识 知识点 函数 处理 更新 管理 方式 样式 视图 资源 插槽 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 2008更改数据库地址和名称 广州嵌入式软件开发流程机构 网络安全产品有哪几个特点 app软件开发专利申请 服务器登录用户密码闪烁 如何跟数据库商要下载量数据 河南省气象局网络技术 网络功率管理服务器 网络安全是啥 深圳直销软件开发费用多少 万山天气预报软件开发 服务器安全测评 1000g每月的服务器够用么 北京新氧科技互联网医院 魔兽世界经典怀旧服玩哪个服务器 使命召唤服务器带什么好 阿里环维网软件开发 广电网络技术人员是干什么 云梦泽网络技术有限公司 你对网络安全的初步认识 管理学外文数据库哪个好 附件过大服务器拒收怎么解决 集控软件开发服务与组态软件 大象点映网络技术有限公司 数据库安全性完整性实验 贵金属平台软件开发 江苏省农行软件开发中心 云端模式软件开发书籍 网络数据库环境特性相关题目 计算机三级数据库怎么多得分
    0