React18 怎么实现 vue3 computed 的效果

React 18 中可以使用 useMemo hook 来实现类似 Vue 3 computed 的效果。以下是一些实现方法:

  1. 使用 useMemo 实现基本的计算属性:
import { useMemo } from 'react';

function MyComponent({ a, b }) {
  const sum = useMemo(() => a + b, [a, b]);

  return <div>Sum: {sum}</div>;
}
  1. 对于复杂的计算,可以将逻辑封装在一个函数中:
import { useMemo } from 'react';

function MyComponent({ items }) {
  const totalPrice = useMemo(() => {
    return items.reduce((total, item) => total + item.price, 0);
  }, [items]);

  return <div>Total Price: {totalPrice}</div>;
}
  1. 如果计算依赖于多个状态,可以将它们组合在一个对象中:
import { useMemo } from 'react';

function MyComponent({ user, products }) {
  const userProductInfo = useMemo(() => {
    return {
      name: user.name,
      totalPurchases: products.filter(p => p.userId === user.id).length
    };
  }, [user, products]);

  return (
    <div>
      <p>User: {userProductInfo.name}</p>
      <p>Total Purchases: {userProductInfo.totalPurchases}</p>
    </div>
  );
}
  1. 对于需要频繁更新的计算属性,可以结合使用 useCallback:
import { useMemo, useCallback } from 'react';

function MyComponent({ data }) {
  const processedData = useMemo(() => {
    // 复杂的数据处理逻辑
    return data.map(item => ({ ...item, processed: true }));
  }, [data]);

  const getItemById = useCallback((id) => {
    return processedData.find(item => item.id === id);
  }, [processedData]);

  return (
    <div>
      {/* 使用 processedData 和 getItemById */}
    </div>
  );
}

使用 useMemo 可以确保只有在依赖项发生变化时才重新计算值,从而优化性能。这与 Vue 3 的 computed 属性类似,都是用于缓存计算结果并在依赖更新时重新计算。

需要注意的是,不要过度使用 useMemo,因为它也会增加内存使用。只在计算成本较高或者需要避免不必要的重渲染时使用它。

Citations:
[1] https://blog.logrocket.com/vue-3-react-developers-side-by-side-comparison-demos/
[2] https://stackoverflow.com/questions/73523864/best-way-to-replace-computed-properties-of-vue-in-react
[3] https://betterprogramming.pub/how-to-incrementally-migrate-from-vue-js-2-to-react-18-part-1-setup-be2cd04458f0?gi=12d5a286da55
[4] https://github.com/gloriasoft/veaury
[5] https://vuejs.org/guide/essentials/computed.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VueReact都是目前非常流行的前端框架,以下将通过回答一些常见的VueReact面试题来介绍它们的特点。 1. VueReact有什么区别? Vue是一种渐进式框架,它更容易上手,适合中小型项目,提供了更多的指令和内置功能。而React是一种更简洁的库,适用于大型项目,更加灵活和自由,但需要配合其他库来实现一些功能。 2. Vue的双向数据绑定和React的单向数据流有什么区别? Vue使用了双向数据绑定,即数据的变化会自动反映在视图上,同时视图上的变化也会同步到数据上。而React采用了单项数据流,数据的变化会通过props向下传递,子组件无法直接修改父组件的数据。 3. VueReact如何进行组件通信? 在Vue中,组件通信可以通过props和$emit事件来实现父子组件之间的通信,也可以通过Vuex来进行跨组件的通信。而React通过props和state来进行组件之间的通信,也可以使用Context和Redux进行跨组件的通信。 4. VueReact的虚拟DOM有什么区别? VueReact都使用了虚拟DOM来提高渲染性能。Vue的虚拟DOM是基于模板的,将数据和模板进行绑定,通过比较新旧虚拟DOM的差异来更新视图。而React的虚拟DOM是通过JSX语法创建的,通过比较新旧虚拟DOM树的差异来更新视图。 5. VueReact对性能优化有哪些策略? Vue提供了一些内置的性能优化策略,如使用v-if来进行条件渲染、使用computed属性来缓存计算结果、使用异步组件来按需加载等。React则提供了PureComponent和React.memo等工具来减少不必要的渲染,同时也可以使用shouldComponentUpdate生命周期钩子来控制组件的渲染。 总结:VueReact都是非常优秀的前端框架,具有各自的特点和优势。在选择框架时,需要根据项目的规模和需求来进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值