记一个React生态及Vue使用体验

本文介绍使用React和Redux进行Web开发的基础知识,涵盖JSX、组件生命周期、Redux工作原理及React Router应用等内容,并对比React与Vue的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初步尝试使用React+Redux来开发,将从以下几个方面记录:React基础,Redux基础,React Router基础,项目组件结构,遇到问题,React与Vue的props,React与Vue的组件通信。

React基础

JSX

JSX能定义简洁且我们熟知的包含属性的树状结构语法。
JSX 把类 XML 的语法转成纯粹 JavaScript,XML 元素、属性和子节点被转换成 React.createElement 的参数。
详见或手动http://www.css88.com/react/docs/jsx-in-depth.html

组件的生命周期

enter image description here

state与props

详见或手动http://www.cnblogs.com/ZSG-DoBestMe/p/5293457.html

Redux基础

以下引自lovesuu的文章,感谢。

enter image description here
上面这张图,在展现单向数据流的同时,还为我们引出了几个熟悉的模块:Store、Actions、Action Creators、以及Views。

相信大家都不会陌生,因为它们就是Flux设计模式中所提到的几个重要概念,在这里,Redux沿用了它们,并在这基础之上,又融入了两个重要的新概念:Reducers和Middlewares。

Actions

问题:action is not defined
import * as actions from '../../actions/home';

需要按照上图步骤,在action中定义方法并暴露出来,将相关action.type同步到reducer

Store

当系统中有很多的模型和相应的视图特别是模型和视图间可能存在的双向数据流动时,其复杂度就会迅速扩大,非常难以理解和调试。React与Redux通过store来实现单向数据流。
store 是一个单一对象:

管理应用的 state
通过 store.getState() 可以获取 state
通过 store.dispatch(action) 来触发 state 更新
通过 store.subscribe(listener) 来注册 state 变化监听器
通过 createStore(reducer, [initialState]) 创建

Action Creators

“redux里面可以不用action creators”,那么action creators是什么呢?Action Creator 意思是动态去生成Action,在Redux里面即bindActionCreators。

midware实现异步

问题:Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.

dispatch(action) 是一个同步的过程:执行 reducer 更新 state -> 调用 store 的监听处理函数。如果需要在 dispatch 时执行一些异步操作(fetch action data),可以通过引入 Middleware 解决。

它提供的是位于 action 被发起之后,到达 reducer 之前的扩展点。 你可以利用 Redux middleware 来进行日志记录、创建崩溃报告、调用异步接口或者路由等等。

Reducers

在Actions里面触发,Reducers通过action.type来改变Store

React Router基础

它是官方维护的,事实上也是唯一可选的路由库。它通过管理 URL,实现组件的切换和状态的变化,开发复杂的应用几乎肯定会用到。
详见或手动http://www.ruanyifeng.com/blog/2016/05/react_router.html?utm_source=tool.lu

遇到问题

ie下constructor中this失效

开发移动端页面是遇到这个问题

问题:

react在contructor里访问props,如果通过this.props.xxxx的方式访问在IE下会存在问题,只能通过contructor的形参props去访问:

contructor(props){
super(props);
var xx = props.xxx; // 没问题
var xx = this.props.xxx; //有问题,props为undefined
}

原因

ie10 以下的 super有问题,解决方案可以使用presets: [‘stage-0’, ‘es2015-ie’, ‘react’]做兼容。具体原因见:链接或手动https://github.com/babel/babel.github.io/blob/492dad8dabfd7326015a5f44157b624e0dde8302/docs/usage/caveats.md#classes-10-and-below

解决方案

安装插件

       "babel-plugin-add-module-exports": "~0.1.2",
       "babel-plugin-transform-es2015-classes": "^6.8.0",
       "babel-plugin-transform-class-properties": "^6.5.2",
       "babel-plugin-transform-es3-member-expression-literals": "^6.8.0",
       "babel-plugin-transform-es3-property-literals": "^6.8.0",
       "babel-plugin-transform-object-assign": "~6.5.0",
       "babel-plugin-transform-proto-to-assign": "^6.8.0",
       "babel-plugin-transform-react-display-name": "~6.5.0",

React与Vue的props

React中的props

  • props的改变是全局性的,不分父到子和子到父

Vue中的props

  • “prop” 是组件数据的一个字段,期望从父组件传下来。子组件需要显式地用 props 选项 声明 props:
    props: [
    ‘item’
    ]
  • prop 默认是单向绑定:当父组件的属性变化时,将传导给子组件,但是反过来不会。这是为了防止子组件无意修改了父组件的状态。不过,也可以使用 .sync 绑定修饰符显式地强制双向或单次绑定。

React与Vue的组件通信

React通过生命周期中的方法

  • 在生命周期处理this.props,nextProps

Vue通过父子组件通信

  1. 子组件可以用 this. parent访this. children,包含它所有的子元素。
  2. 这让父组件与子组件紧密地耦合,Vue 实例实现了一个自定义事件接口,用于在组件树中通信。这个事件系统独立于原生 DOM 事件,做法也不同。

    每个 Vue 实例都是一个事件触发器:
    • $on() 监听事件
    • $emit() 在Vue 实例上面触发事件;
    • $broadcast() 广播事件,事件向下传导给所有的后代。

    • $dispatch() 派发事件,事件沿着父链冒泡;

      以点击侧栏主面板响应为例,在子组件export default中,书写

       methods:{
            selectNav(event){
              this.$dispatch('selectNav',event.target.innerHTML)
            },
          }
      

      在父组件 export default中,书写

      events:{
            selectNav(title){
             ...
            }
          }
      

      由此实现了子模板到父模板的数据传递和事件触发,达到了主面板响应的目的

经过初步实践,这样的传递数据和父子组件通信,给开发者的感觉是思维清晰,容易上手,必要的组件分割不因为依赖束手束脚~

结束语

从项目需求出发学习了以上知识
由于目前经验以及深度有限,如果有误或者有片面,恳请指教
<think>好的,我现在需要帮助用户比较ReactVue2和Vue3的特性差异。用户的问题看起来是希望了解这三个前端框架之间的主要区别,可能用于项目选型或者学习方向。首先,我需要回忆和整理这三个框架的核心特点、架构设计、性能优化等方面的信息。 首先,React的特点是基于虚拟DOM和组件化开发,使用JSX语法,状态管理通常需要配合Redux或Context API。Vue2和Vue3都支持响应式系统,但Vue3引入了Composition API,这是Vue2的Options API的一个重大变化。另外,Vue3在性能上做了很多优化,比如使用Proxy代替Object.defineProperty来实现响应式,这应该能提升大型应用的性能。 接下来要考虑用户可能的深层需求。用户可能想了解哪个框架更适合他们的项目,比如开发效率、学习曲线、生态系统、社区支持等。比如,React生态系统更庞大,适合复杂应用,而Vue可能更易上手,适合快速开发。 然后,我需要参考用户提供的引用内容。引用[1]提到ReactVue的比较,引用[2]和[3]涉及React的虚拟DOM和PureComponent,引用[4]提到模板的处理方式,引用[5]提到Immutable.js使用。这些引用可以帮助我补充一些具体的技术点,比如React的虚拟DOM对比Vue的渲染机制,或者Vue3的Composition API与React Hooks的异同。 接下来,我需要组织这些信息,分点比较各个框架。可能的结构包括核心架构、响应式系统、组件化方式、性能优化、生态系统等。每个部分下分别说明ReactVue2、Vue3的不同之处。例如,在响应式系统部分,Vue2使用Object.defineProperty,而Vue3使用Proxy,React则依赖于状态管理库或useState Hook来触发重新渲染。 另外,用户可能关心学习曲线和社区资源。Vue2的Options API相对直观,适合新手,而Vue3的Composition API更灵活,类似于React Hooks,但可能需要一定的学习成本。ReactJSX需要适应,但提供了更强大的JavaScript表达能力。 需要注意避免错误信息,比如Vue3的Composition API是否稳定,React的并发模式(Concurrent Mode)是否已正式发布。同时,要确保引用的内容正确关联到对应的框架特性,比如引用[3]提到的React.PureComponent在Vue中的对应机制可能是什么。 最后,生成相关问题,帮助用户进一步探索,比如性能比较、状态管理的最佳实践、迁移路径等。确保问题覆盖用户可能感兴趣的后续方向。 总结来说,回答需要结构清晰,对比明确,涵盖核心特性、性能、开发体验等方面,引用相关文献支持,同时提出相关问题引导深入学习。</think>### React vs Vue2 vs Vue3 核心特性对比 #### 1. **核心架构设计** - **React** 基于虚拟DOM和组件化设计,使用JSX语法将逻辑与视图耦合。状态管理依赖外部库(如Redux)或内置Hooks(如useState)[^2][^3]。 示例: ```jsx function Counter() { const [count, setCount] = useState(0); return <button onClick={() => setCount(count + 1)}>{count}</button>; } ``` - **Vue2** 采用Options API,通过`data`、`methods`等选项组织代码,基于`Object.defineProperty`实现响应式系统。 示例: ```javascript new Vue({ data() { return { count: 0 } }, methods: { increment() { this.count++ } } }) ``` - **Vue3** 引入**Composition API**,支持逻辑复用(类似React Hooks),响应式系统改用`Proxy`实现,提升性能与调试能力[^4]。 示例: ```javascript setup() { const count = ref(0); const increment = () => count.value++; return { count, increment }; } ``` #### 2. **响应式机制** - **React** 需显式调用状态更新函数(如`setState`),依赖**虚拟DOM对比算法**决定渲染更新[^2]。 - **Vue2** 通过`Object.defineProperty`自动追踪依赖,但无法检测对象属性的新增/删除,需使用`Vue.set`。 - **Vue3** 基于`Proxy`的响应式系统,支持全类型数据(如Map、Set)的深度监听,无需特殊API[^4]。 #### 3. **性能优化** - **React** 使用`React.memo`或`PureComponent`避免不必要的渲染,依赖开发者手动优化。 并发模式(Concurrent Mode)支持任务优先级调度。 - **Vue2/Vue3** 自动追踪依赖关系,Vue3通过`Tree-shaking`减少打包体积,优化渲染性能(如静态节点提升)。 #### 4. **开发体验** - **模板 vs JSX** Vue使用HTML模板,支持指令(如`v-if`);React通过JSX实现声明式UI[^4]。 - **类型支持** Vue3+TypeScript提供更好的类型推断,React需额外配置(如`@types/react`)。 #### 5. **生态系统** - **React** 生态庞大(如Next.js、Redux),适合复杂应用,但技术选型成本较高。 - **Vue** 官方维护路由(Vue Router)、状态管理(Vuex/Pinia),Vue3支持Vite构建工具提升开发效率。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值