从vue3速学react

这篇具有很好参考价值的文章主要介绍了从vue3速学react。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单位老项目vue2,新项目vue3,业务已经熟练使用vue了,空余时间自学下react,写个博客记录下

react没有双向绑定,用的是jsx语法,useState后面是初始化值,需要改变data的时候,需要用定义的setXXX来改变XXX值,比如下面我写的就是setData,里面可以直接赋值,也可以写个复杂的函数处理

vue3:

const data=ref({});
data.value={xxx:xxxx};

react:

const [data, setData] = useState({});
setData({xxx:xxxx});
// 也可以写函数
setData(()=>{
	return {xxx:xxxx}
});

useEffect,react很常见的一个参数,下面讲解了大概的意思(没写过react企业级项目,可能意思理解不是很正确)

react:

useEffect(() => {
  // 副作用函数的内容
})  
每次更新之后都要执行
和vue的watchEffect类似
--------------------
useEffect(() => {
  // 副作用函数的内容
}, []) 
初始化页面时 只执行第一次
和vue的onMonuted类似
--------------------
useEffect(() => {
  // 副作用函数的内容
}, [依赖项]) //依赖项可以有多个
1 初始执行一次 2 每次依赖项的值变化时执行
和vue的watch并设置immediate类似

那react是怎么传数据的呢?vue里面有props上下级传,react里面一个个组件都写成了函数的形式,如下,参考的是官网的例子,父组件Board给子组件Square的value传值

切记,react语法,如果函数是组件,函数名称要 大写

react:

function Square({ value }) {
  return <button className="square">{value}</button>;
}

export default function Board() {
  return (
    <>
      <div className="board-row">
        <Square value="1" />
        <Square value="2" />
        <Square value="3" />
      </div>
      <div className="board-row">
        <Square value="4" />
        <Square value="5" />
        <Square value="6" />
      </div>
      <div className="board-row">
        <Square value="7" />
        <Square value="8" />
        <Square value="9" />
      </div>
    </>
  );
}

那么vue里面的emit在react要怎么实现呢
通过父组件传递函数让子组件调用

import {useState} from 'react'
// 父组件
export default function App() {
  const [value,setValue] = useState(0)
  const fn = (value) => {
    setValue(value)
  }
  return (
    <>
    <div>我是子组件传递的Value:{value}</div>
    <Child fn={fn}></Child>
    </>
  )
}

// 子组件
function Child(props) {
  const fn1 = () => {
    props.fn(123)
  }
  return (
    <button onClick={fn1}>子传父</button>
  )
}

然后上面的函数可以优化下,这样可以一直点,数值一直变大

import {useState} from 'react'
// 父组件
export default function App() {
  const [value,setValue] = useState(0)
  const fn = (value) => {
    setValue(value)
  }
  return (
    <>
    <div>我是子组件传递的Value:{value}</div>
    <Child fn={fn} value={value}></Child>
    </>
  )
}

// 子组件
function Child(props) {
  const fn1 = () => {
    props.fn(props.value+1)
  }
  return (
    <button onClick={fn1}>子传父{props.value}</button>
  )
}

如果要获取组件的ref对象,要咋获取呢,需要用到关键字useRef,对比下vue3就不需要这个关键字了

vue3:

<button ref="tableRef" className="square" onClick={onSquareClick}>
   {{count}}
</button>

const tableRef = ref(null);

react:

const tableRef = useRef<any>();

return (
  <button ref={tableRef} className="square" onClick={onSquareClick}>
    {count}
  </button>
);

路由跳转:
vue3:

import { useRoute, useRouter } from 'vue-router';

const route = useRoute();
const router = useRouter();
// 获取路由的params数据
const projectId = route.params.projectId;
// 路由跳转
router.push({ path: `/project/xxx/edit`, query: { id: '123' } });

react:

import React from 'react'
import { useHistory,useLocation } from 'react-router-dom'
export default ()=> {
    const history = useHistory();
    const location = useLocation();
    // 获取路由数据
    console.log(location, 'props');
    // 路由跳转 路由跳转后,参数会显示在地址栏
    history.push({pathname: '/personal', search: 'test=22222'});
    // 路由跳转 路由跳转后,页面刷新不会丢失数据,并且地址栏也看不到数据 跳转的方法是使用
    history.push({pathname: '/personal', state: { test: 'dashboard' }})
    return 123
}

计算属性,vue里面用的是computed,react有个类似的useMemo

useMemo使用:
useMemo(fn, arr)第一个参数为函数。第二个参数为依赖项,并且其值发生改变,才会多次执行执行,否则只执行一次,如果为空数组[],fn只执行一次。
vue3:

const isRunning = computed(() => {
  return props.data.status === 'running';
});

react:

const isRunning = useMemo(() => {
  return props.data.status === 'running';
}, [props.data.status]);

后续慢慢补充。。。文章来源地址https://www.toymoban.com/news/detail-611787.html

到了这里,关于从vue3速学react的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3创建项目报错Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_ut

    报错信息: Vue.js - The Progressive JavaScript Framework TypeError: (0 , import_node_util.parseArgs) is not a function     at init (C:UsersAdministratorAppDataLocalnpm-cache_npx2f7e7bff16d1c534node_modulescreate-vueoutfile.cjs:4481:72)     at Object.anonymous (C:UsersAdministratorAppDataLocalnpm-cache_npx2f7e7bff16d1c534node_module

    2024年04月10日
    浏览(163)
  • Vue3 与 React 全方面对比

    React  语法少、难度大; Vue  语法多,难度小 例如指令: Vue React Vue  给我们提供了很多的指令功能,而这些功能在  React  中基本都需要我们使用原生  js  来实现。 所以会有很多人说: \\\"使用 Vue 实际上你就是在操作 Vue,使用 React 实际上你是在操作 js\\\"。 React 魔改少,手动

    2024年02月13日
    浏览(43)
  • qiankun:react18主应用 + 微应用 react18 + vue3

    一:主应用 搭建react项目 安装Antd 在 index.js中引入 安装react-router : 在 index.js中引入 安装 qiankun : 在主应用中注册微应用,在 index.js中引入 注:子应用嵌入到主应用的地方,id要跟index.js下registerMicroApps里面的container设置一致 修改App.js文件,将如下代码放入App.js 修改App.css样

    2024年02月16日
    浏览(40)
  • vue3图片懒加载借助插件vue3-lazy react中的图片懒加载 借助插件 react-lazyload

    vue2 就用 vue-lazyload 这个喽 安装 npm install vue3-lazy 在main.ts中配置 在页面中使用 1, 下载安装懒加载模块 2, 在src/assets/目录下放入懒加载占位图 placeholder.gif 3, 在需要使用懒加载的组件中导入懒加载模块和占位图 4, 在组件rander函数中创建占位图片标签img 5, 在组件模板中给需要懒

    2024年02月11日
    浏览(47)
  • Node.js npm V8 React Express的运行配合关系:构建JavaScript应用的基石

    目录 Node.js 和 V8 引擎 Node.js 和 npm LTS(Long Term Support) React Node.js的作用 Express Node.js 和 V8 引擎 Node.js 使用 Google 的 V8 JavaScript 引擎 来执行 JavaScript 代码。V8 是一个高性能的 JavaScript 和 WebAssembly 引擎,用于在 Google Chrome 浏览器和 Node.js 中运行 JavaScript。 V8 引擎的更新 通常包括

    2024年03月12日
    浏览(64)
  • 从javascript到vue再到react:前端开发框架的演变

    目录 JavaScript: 动态语言的基础 JavaScript:Web开发的起点 Vue.js: 渐进式框架的兴起 Vue.js:简洁、高效的前端框架 React.js: 声明式UI的革新 React.js:强大、灵活的前端框架 演变之路与未来展望 演变过程 当提到前端开发中的框架时,JavaScript、Vue.js和React.js是三个最常见的名词。它

    2024年02月07日
    浏览(53)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

    Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态) :Vuex 使用单一状态树,即一个对象包含全部的应用层级状态。这个状态树对应着一个应用中的所有状态。 Gett

    2024年01月23日
    浏览(48)
  • vue2、vue3、react响应式原理、组件声明周期阐述与对比

    响应式原理: Vue.js 的响应式原理是通过使用 Object.defineProperty 函数来实现的。在 Vue.js 中,当一个对象被传入 Vue 实例的 data 选项中时,Vue.js 会将这个对象的属性转换为 getter 和 setter,以便在属性被访问或修改时能够触发相应的更新。 具体来说,Vue.js 会在实例化过程中递归

    2024年02月06日
    浏览(54)
  • 前端技术Html,Css,JavaScript,Vue3

    1.基本标签 2.文本格式化 3.链接 4.图片 5.无序列表 6.有序列表 7.表格 8.表单 1.选择器 2.文本和字体 3.链接 4.隐藏 5.定位position 6.浮动 7.对齐 8.图像 1.输出 2.函数 3.常用事件 4.DOM 5.改变Html 6.DOM 元素 (节点) 尾部创建新的 HTML 元素 (节点) - appendChild() 头部创建新的 HTML 元素 (节点)

    2024年02月13日
    浏览(53)
  • 微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用

    理解 :我们可以简单理解为微前端是将一个项目拆分成多个模块,每个微前端模块可以由不同的团队进行管理,并可以自主选择框架,并且有自己的仓库,可以独立部署上线 应用场景 :1.当公司代码较老需要使用新的技术栈时我们可以使用微前端。2.多个团队同时开发时,每

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包