欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > react和vue 基础使用对比

react和vue 基础使用对比

2025/3/15 5:09:47 来源:https://blog.csdn.net/qq_40994735/article/details/146235367  浏览:    关键词:react和vue 基础使用对比

1.实现功能(ts)

0.基础属性使用
1.组件直接的通信
2.useState 动态修改值
3.循环遍历功能
4.实现类型vue 的 watch ,filter,computed 属性功能
5.实现类似vue2的生命周期
5.类型vue v-if功能的实现

2.文件结构图

在这里插入图片描述

3.具体代码

interface.ts
import "./index.less";
import { message } from "antd";
import { useState, useEffect, useRef } from "react";
import { UserInfo } from "./interface";
import UserAge from "./components/UserAge"const UseComponent = () => {let [user, setUser] = useState<UserInfo>({ name: "张三", age: 5 });const [messageApi, contextHolder] = message.useMessage();let [show, setShow] = useState<boolean>(false);// 循环遍历let [userList] = useState<UserInfo[]>([{ id: 1, name: "张三", age: 5 },{ id: 2, name: "李四", age: 10 },{ id: 3, name: "王五", age: 15 }]);const updateShow = () => {setShow(!show)}const updateAge = (updateAge: number, type: string = "add") => {let ageTemp: number = user.age;if (type === "add") {ageTemp = ageTemp + updateAge;} else if (type === "reduce") {ageTemp = ageTemp - updateAge;}if (ageTemp < 0) {messageApi.error("年龄不能小于0");ageTemp = 0;} else if (ageTemp > 100) {messageApi.error("年龄不能大于100");ageTemp = 100;}setUser(user => ({...user,age: ageTemp}));};const updateChild = (age: number) => {updateAge(age)}// 类型vue 的生命周期// Vue2 生命周期      | React 实现//---------------------------------------// beforeCreate     => 无直接等价(可用 useRef 模拟)// created          => useEffect 空依赖// beforeMount      => useLayoutEffect 空依赖// mounted          => useEffect 空依赖// beforeUpdate     => useLayoutEffect 无依赖// updated          => useEffect 无依赖// beforeDestroy    => useEffect 返回清理函数// destroyed        => useEffect 返回清理函数const UseComponent = () => {// beforeCreate 阶段(组件初始化前)const initializedRef = useRef<boolean>(false);if (!initializedRef.current) {console.log("beforeCreate - 类似 Vue 的 beforeCreate");initializedRef.current = true;}// created 阶段(组件初始化)useEffect(() => {console.log("created - 类似 Vue 的 created");}, []);// mounted 阶段(DOM 挂载完成)useEffect(() => {console.log("mounted - 类似 Vue 的 mounted");}, []);// updated 阶段(数据更新)useEffect(() => {console.log("updated - 类似 Vue 的 updated");});// beforeDestroy 阶段(组件卸载前)useEffect(() => {return () => {console.log("beforeDestroy - 类似 Vue 的 beforeDestroy");};}, []);}UseComponent()return (<>{contextHolder}<div className="card content-box"><div>姓名:{user.name}</div><div>年龄:{user.age}</div><div className="flex-btn"><button className="add-btn" onClick={() => updateAge(1)}>年龄+1</button><button className="add-btn" onClick={() => updateAge(1, "reduce")}>年龄-1</button><button className="add-btn" onClick={() => updateShow()}>{!show ? "显示" : '隐藏'}</button></div><div className="child"><div>我是子组件</div>{show && <UserAge user={user} updateChild={updateChild} />}</div><div>{userList.map((item, index) => {return (<div key={index}><div>姓名:{item.name}</div><div>年龄:{item.age}</div><div>------------------</div></div>)})}</div></div></>);
};export default UseComponent;
interface.ts
// 定义属性 ?代表可填可不填
export interface UserInfo {id?: number;name: string;age: number;
}
UserAge.tsx
import React from "react";
import { UserInfo } from "../interface";interface Props {user: UserInfo;updateChild: (num: number) => void;
}const UserAge: React.FC<Props> = (props) => {//获取父组件的参数// 类似 vue 的 watch React.useEffect(() => {console.log("子组件渲染", props.user);}, [props.user]);// 类似 vue 的 computedconst ageStatus: string = React.useMemo(() => {return props.user.age > 20 ? '中年' : '少年'}, [props.user.age]);// 类似vue 的 filter  也可以使用自定义hook的方式实现const ageFilter = (age: number) => {return age + "岁"}// 向父组件传递参数const updateFan = () => {props.updateChild(5);};return (<><div>我是子组件的age: {ageFilter(props.user.age)} {ageStatus}</div><button onClick={updateFan}>子组件控制父组件</button></>);
}export default UserAge;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词