harness-sdk 的 fileEditor 文件编辑工具:为 Agent 提供安全的程序化文件读写能力
2026/9/28 9:33:28
Vue 和 React 都是优秀的 UI 框架,但它们的核心理念有所不同:
Vue 的特点:
React 的核心思想:
从模板到 JSX
从响应式系统到状态管理
从选项式到函数式
Vue 模板 vs React JSX:
// Vue 模板<template><div><h1>{{title}}</h1><button @click="handleClick">Click me</button><ul><li v-for="item in items":key="item.id">{{item.name}}</li></ul></div></template>// React JSXfunctionComponent(){return(<div><h1>{title}</h1><button onClick={handleClick}>Click me</button><ul>{items.map(item=>(<li key={item.id}>{item.name}</li>))}</ul></div>);}Vue 响应式数据 vs React 状态:
// Vue 3 Composition APIimport{ref,computed,watch}from'vue';exportdefault{setup(){constcount=ref(0);constdoubleCount=computed(()=>count.value*2);watch(count,(newVal)=>{console.log('Count changed:',newVal);});constincrement=()=>{count.value++;};return{count,doubleCount,increment};}};// React with Hooksimport{useState,useMemo,useEffect}from'react';functionComponent(){const[count,setCount]=useState(0);constdoubleCount=useMemo(()=>count*2,[count]);useEffect(()=>{console.log('Count changed:',count);},[count]);constincrement=()=>{setCount(prev=>prev+1);};return{count,doubleCount,increment};}| Vue 生命周期 | React 生命周期/Hook |
|---|---|
| beforeCreate | 构造函数 或 useEffect(() => {}, []) |
| created | useState + useEffect(() => {}, []) |
| mounted | useEffect(() => {}, []) |
| updated | useEffect(() => {}, [依赖]) |
| beforeUnmount | useEffect(() => { return () => {} }, []) |
| unmounted | cleanup function in useEffect |
条件渲染:
// Vue<div v-if="isVisible">Content</div><div v-else>Other Content</div>// React{isVisible?<div>Content</div>:<div>Other Content</div>}// 或{isVisible&&<div>Content</div>}{!isVisible&&<div>Other Content</div>}表单处理:
// Vue - 双向绑定<input v-model="username"/>// React - 受控组件const[username,setUsername]=useState('');<input value={username}onChange={(e)=>setUsername(e.target.value)}/>常用 Hooks 及其 Vue 对应:
useState≈ref/reactiveuseEffect≈watch+ 生命周期useMemo≈computeduseCallback≈ 记忆化函数useRef≈ref(DOM 引用) 或响应式对象useContext≈provide/inject避免不必要的重新渲染
React.memo包装组件useCallback和useMemo记忆化代码分割与懒加载
// VueconstAsyncComponent=defineAsyncComponent(()=>import('./Component.vue'));// ReactconstLazyComponent=React.lazy(()=>import('./Component'));React Native 继承了 React 的核心思想:
1. 标签系统的变化:
// React Web<div>,<span>,<p>,<input>,<button>// React Native<View>,<Text>,<TextInput>,<TouchableOpacity>,<ScrollView>2. 样式系统的差异:
// React Web - CSS/Sass/CSS-in-JS<div className="container"style={{color:'red'}}>// React Native - StyleSheet APIimport{StyleSheet}from'react-native';conststyles=StyleSheet.create({container:{flex:1,backgroundColor:'#fff',},});<View style={styles.container}>3. 布局系统:
1. 导航系统:
2. 原生模块集成:
NativeModules或第三方库3. 平台特定代码:
// 平台检测import{Platform}from'react-native';conststyles=StyleSheet.create({container:{marginTop:Platform.OS==='ios'?20:10,},});// 平台特定文件Component.ios.js Component.android.js调试工具:
热重载:
第一阶段:React 基础
第二阶段:React 进阶
第三阶段:React Native
迁移现有 Vue 项目
构建完整的 React 应用
React Native 实战
React 常见陷阱:
setCount(prev => prev + 1)React Native 常见陷阱:
从 Vue 到 React 再到 React Native 的过渡是一个渐进的过程。关键在于理解核心理念的差异,而不是简单的语法转换。React 的哲学更倾向于函数式编程和明确的副作用管理,而 React Native 则在保持这一哲学的同时,适应了移动端的开发需求。
核心建议:
作为资深开发者,前端工程经验、解决问题的能力和架构思维是最宝贵的财富,这些在不同框架之间都是可以迁移的。技术栈的变迁只是工具的变化,核心的工程能力才是真正的价值所在。