当前位置: 首页 > news >正文

Vue和React的区别

组件开发方式:
  1. Vue 使用单文件组件(SFC), HTML, JS 和 CSS 在一个文件内实现

    <template>
      <div class="my-component">
        <!-- HTML模板 -->
      </div>
    </template>
    
    <script>
    export default {
      // JavaScript代码
    }
    </script>
    
    <style>
    .my-component {
      /* CSS样式 */
    }
    </style>
    
  2. React使用 JSX 和 JavaScript

    import React from 'react';
    import './MyComponent.css';
    
    function MyComponent() {
      return (
        <div className="my-component">
          {/* JSX 模板 */}
        </div>
      );
    }
    
    export default MyComponent;
    
数据响应:
  1. Vue3 基于响应式数据, 底层通过 new Proxy() 实现对数据变更的监控,相比于 React 更加的简单
  2. React 采用 setState or useState,手动的方式进行变更。
生命周期
  1. Vue3 生命周期更加灵活,8 个生命周期能够对组件各个阶段做到精确的控制

    beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeUnmount、unmounted

  2. React 生命周期更加精简

    constructor、componentDidMount、componentDidUpdate、componentWillUnmount

路由&状态管理
  1. Vue3 使用 Pinia/Vuex,router 使用 Vue-Router, 提供了一种简单和直接的状态管理方式
import { defineStore, acceptHMRUpdate } from 'pinia'
import { useUserStore } from './user'

export const useCartStore = defineStore({
  id: 'cart',
  state: () => ({
    rawItems: [] as string[],
  }),
  getters: {
    items: (state): Array<{ name: string; amount: number }> =>
      state.rawItems.reduce((items, item) => {
        const existingItem = items.find((it) => it.name === item)

        if (!existingItem) {
          items.push({ name: item, amount: 1 })
        } else {
          existingItem.amount++
        }

        return items
      }, [] as Array<{ name: string; amount: number }>),
  },
  actions: {
    addItem(name: string) {
      this.rawItems.push(name)
    },

    removeItem(name: string) {
      const i = this.rawItems.lastIndexOf(name)
      if (i > -1) this.rawItems.splice(i, 1)
    },

    async purchaseItems() {
      const user = useUserStore()
      if (!user.name) return

      console.log('Purchasing', this.items)
      const n = this.items.length
      this.rawItems = []

      return n
    },
  },
})

if (import.meta.hot) {
  import.meta.hot.accept(acceptHMRUpdate(useCartStore, import.meta.hot))
}
  1. React 使用 Redux/Mobx, router 使用 React-Router, 提供了更灵活的状态管理方案

    // actions
    export const Add = {
        type:'add'
    }
    export const Sub  = {
        type:'sub'
    }
    // reducer
    export default function counterReducer(state = initialState, action) {
        switch (action.type) {
            case 'add': return Object.assign({}, state, {
                count: state.count + 1
            });
            case 'sub': return Object.assign({}, state, {
                count: state.count - 1
            });
            default: return state;
        }
    }
    //设置一个初始值
    const initialState = {
        count: 0,
    }
    
视图功能
  1. Vue3 的视图通过 Vue3 定义的指令 + 模板的方式,包含样式,事件,表单,lot,DOM 节点操作, Provide/inject

    <template>
      <div>
        <ul>
        	<li 
      			v-for="item,index in list" 
            @click="handleClick(index)"
            :style="{color: 'red'}"
              ></li>
        </ul>
        <div class="container">
          <header>
            <slot name="header"></slot>
          </header>
          <main>
            <slot></slot>
          </main>
          <footer>
            <slot name="footer"></slot>
          </footer>
    		</div>
          <div>
            <input name="username" :v-model="user.name" />
        	</div>
        </form>
      </div>
    </template>
    <script>
      methods: {
      	handleClick(index){
    
      }
    }
    </script>
    
  2. React 视图使用原生 JS + 模板的方式,包含样式,时间,表单,Children, DOM 节点操作, Context

function MyComp() {
	return (
    <>
    	<ul ref="List">t
      { 
          list.map((v, i)=> <li onClick={handleClick(i)} style={{color: 'red'}}></li>)
      }
      </ul>
      <form>
        <div>
          <input name="username" onChange="(e) => handleInputChange(e)" value={user.name} />
      	</div>
    </form>
   </>
  )
}
    
const handleClick = (index) => {
    return () => {
        console.log(index)
    }    
}

相关文章:

  • C# 特性 学习记录
  • springboot023学生宿舍管理系统
  • 《LSTM与HMM:序列建模领域的双雄对决》
  • GPU的核心的时钟频率,使用什么命令查看和计算
  • 蓝桥杯 Java B 组之简单数学问题(素数判断、最大公约数)
  • 在anaconda环境中构建flask项目的exe文件
  • DrissionPage(实战)
  • GitHub 使用教程:从入门到进阶
  • 异构计算架构助力智能座舱实现高效低耗体验
  • PMTUD By UDP
  • RK3588开发板部署DeepSeek-R1-Distill-Qwen-1.5B的步骤及问题
  • OSI 参考模型和 TCP/IP 参考模型
  • AI技术+Xsens惯性捕捉技术:科技碰撞下的无限可能
  • 【网络测试】tmux工具常用指令
  • 单片机上SPI和IIC的区别
  • 动态建表并插入数据
  • 【uniapp-小程序】实现方法调用的全局tips弹窗
  • Centos搭建python环境
  • Python创建Excel的方式——提供4中方式可供参考
  • Python基础语法精要
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险
  • 经济日报刊文:品牌经营不能让情怀唱“独角戏”
  • 上海发布首份直播电商行业自律公约,禁止虚假宣传、商业诋毁
  • 上海第四批土拍成交额97亿元:杨浦宅地成交楼板单价半年涨近7000元
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 视频丨习近平同普京在主观礼台出席红场阅兵式