从Vue快速上手React

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

前言

还没使用过React 的 vue同学可以通过这篇博客快速上手React。

1、数据读写

Vue 数据读写:

import { ref, reactive } from 'vue'

const str = ref<string>('Aos')
const obj = reactive<Record<string, string>>({
  name: 'vue',
  version: '3.2.x'
})
str.value = '66666'
console.log(obj.name,str.value)

React 数据读写:

import React, { useState } from "react";

const Component: React.FC = function () {
	const [getCount, setCount] = useState<number>(0);
	return (
		<>
			<div>{getCount}</div>
			<button onClick={() => setCount(getCount + 1)} />
		</>
	);
};

export default Component;

2、数据监听

Vue提供了 watch 帮忙监听数据变化
React提供了 useEffect 帮忙监听数据变化,但请注意,useEffect还有其他用途,并不局限于此
注意:vue中的数据监听watch可以直接获取新旧值,而react中数据监听useEffect不支持直接获取新旧值

Vue 数据监听:

import { watch, ref, reactive } from 'vue'
const aaa = ref<string>('123456')
const bbb = reactive<Record<string, string>>({
  name: 'vue',
  version: '3.3.4'
})
// 单个监听
watch(aaa, (val, oldVal) => {
  console.log(val)
  console.log(oldVal)
})
// 多个监听
watch([aaa, bbb], (val, oldVal) => {
  console.log(val)
  console.log(oldVal)
}, {
  deep: true,
  immediate: true
})

React 数据监听:

import React, { useState, useEffect } from "react";

const app = () => {
	const [count, setCount] = useState<number>(0);
	const [aaa, setAaa] = useState<number>(100);

	useEffect(() => {
		console.log("监听count");
		// 注意:这个初始化时会执行一次,类似于 watch 的 immediate = true
	}, [count]);

	useEffect(() => {
		console.log("支持多个监听");
	}, [count, aaa]);

	return (
		<>
			<div>count: {count}</div>
			<div>aaa: {aaa}</div>
			<button onClick={() => setCount(count + 1)}>count++</button>
			<button
				onClick={() => {
					setCount(count => count + 1);
					setAaa(aaa => aaa + 1);
				}}
			>
				多个
			</button>
		</>
	);
};

export default app;

React 获取新旧值方法示例:

import React, { useState, useEffect, useRef } from "react";

export default function RefHookDemo() {
	const [count, setCount] = useState(0);
	const countRef = useRef(count);

	useEffect(() => {
		console.log("旧值", countRef.current);
		countRef.current = count;
		console.log("新值", count);
	}, [count]);

	return (
		<div>
			<h2>前一次的值: {countRef.current}</h2>
			<h2>这一次的值: {count}</h2>
			<button onClick={() => setCount(count + 1)}>+1</button>
		</div>
	);
}

3、事件绑定

vue 事件绑定:

<!-- vue3 -->
<template>
  <div>
    {{ count }}
	<!-- vue dom事件绑定时候必须传 运行函数 -->
	<button @click="setCount()"> +1 </button>
	<button @click="setCount(3)"> +3 </button>
	<button @click="() => { setCount(5) }"> +5 </button>
	<button @click="count += 7"> +7 </button>
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

const count = ref<number>(0)

const setCount =  (addNum: number = 1) => {
  count.value += addNum
}
</script>

React 事件绑定:

import React, { useState } from "react";

const app = () => {
	const [count, setCount] = useState<number>(0);

	const addNum = (num: number) => {
		setCount(count + num);
	};

	return (
		<>
			{count}
			{/* react dom事件绑定时候必须传函数类型 */}
			<button onClick={() => addNum(1)}> +1 </button>
			<button onClick={() => setCount(count + 3)}> +3 </button>
		</>
	);
};

export default app;

4、父子组件通信

父 => 子:

vue和react都一样,通过 props传递

<!-- vue3 -->
<template>
  <childComponent title="data1" :value="23" />
</template>
<script lang="ts" setup>
import childComponent from 'xxxxxx'
</script>

// React
import React from "react";

const Child = (porps: any) => {
	return (
		<>
			<div>title: {porps.title}</div>
			<div>value: {porps.value}</div>
		</>
	);
};

const Parent = () => {
	const title = "标签";

	return <Child title={title} value="23" />;
};

export default Parent;

子 => 父:

Vue可以通过emits向父传递回调事件,React可以通过向子组件传递回调函数实现

<!-- vue3 -->
<template>
  <button @click="sendMsg()">向父传消息</button>
</template>
<script lang="ts" setup>
import { defineEmits } from 'vue'
const $emits = defineEmits(['send'])

const sendMsg = () => {
  $emits('send', '我是子组件的回调')
}
</script>
// React
import React, { useCallback } from "react";

const Child = (porps: any) => {
	return <button onClick={porps.cb}>向父传消息</button>;
};

const Parent = () => {
	const getChildEvent = useCallback(() => {
		console.log("我是子组件的回调");
	}, []);
	return <Child cb={getChildEvent} />;
};

export default Parent;

使用useCallBack包一下需要传入子组件的那个函数。那样的话,父组件重新渲染,子组件中的函数就会因为被useCallBack保护而返回旧的函数地址,子组件就不会检测成地址变化,也就不会重选渲染。

5、插槽

vue通过插槽方式实现,react通过获取props.children,加载到对应位置实现文章来源地址https://www.toymoban.com/news/detail-542515.html

Vue 插槽:

<!-- vue3 parent -->
<template>
  <ChildComponent>
  <h1>默认位置</h1>
  <h2 slot="place2">第二位置</h2>
  </ChildComponent>
</template>
<!-- vue3 Child -->
<template>
  <div>
    <!-- 默认位置 -->
    <slot></slot>
	<hr/>
	<!-- 第二位置 -->
	<slot name="place2"></slot>
  </div>
</template>

React 插槽:

import React from "react";

const Child = (porps: any) => {
	return (
		<>
			{porps.place}
			<hr />
			{porps.place2}
		</>
	);
};

const Parent = () => {
	return <Child place={<h1>默认位置</h1>} place2={<h2>第二位置</h2>}></Child>;
};

export default Parent;

React 实现 v-if 指令

import { useState } from "react";

const Child = (porps: any) => {
	return <>{porps.show ? <div>条件渲染</div> : null}</>;
};

const Parent = () => {
	const [show, setShow] = useState(false);

	return (
		<>
			<button onClick={() => setShow(!show)}>控制条件隐藏</button>
			<Child show={show}></Child>
		</>
	);
};

export default Parent;

React 实现 v-for 指令

import React from "react";

const app = () => {
	const list = [9, 0, 6, 8, 1, 4, 9];

	return (
		<>
			{list.map((item, index) => {
				return <div key={index}>{item}</div>;
			})}
		</>
	);
};

export default app;

React 实现 v-model 指令

import { useState } from "react";

const app = () => {
	const [value, setValue] = useState("");
	const onChange = e => {
		setValue(e.target.value);
	};
	return (
		<>
			<input value={value} onChange={onChange} />
		</>
	);
};

export default app;

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

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

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

相关文章

  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

    🎉欢迎来到Java学习路线专栏~探索2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 🍹文章作者技术和水

    2024年02月11日
    浏览(38)
  • 前端框架之争:Vue.js vs. React.js vs. Angular

    🎉欢迎来到Web前端专栏~前端框架之争:Vue.js vs. React.js vs. Angular ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果

    2024年02月07日
    浏览(81)
  • 如何使用前端框架(React、Angular、Vue.js等)?该如何选择?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月07日
    浏览(47)
  • 前端刷新页面的五种方法(含原生js、vue和react)

    1、window.history.go(0)方法 2、location.reload()方法 3、location.href=location.href方法 4、vue-router方法 5、react-router方法

    2024年02月16日
    浏览(37)
  • 前端2023最全面试题(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的闭包是一种函数,它有权访问其词法环境的变量和其它函数。这意味着,即使其包含它的函数已经执行完毕,其词法环境仍然存在,因此可以访问其作用域内的变量。 答案:回调函数是在某个特定事件之后执行的函数。在JavaScript中,通常使用回调函数来处

    2024年02月06日
    浏览(44)
  • 【前端】html2canvas生成图片空白排查data:;(js vue react uniapp)

    因为要做一个分享图,就用到了html2canvas,一开始是好好的,今天随便测了下,发现图片显示不出来了。打印了下,生成的图片链接变成了 data:; 。后面一步一步地排查,发现是页面内容太多了,删减一点内容就能显示出来。然后我又去认真看了下html2canvas的各个参数,发现可

    2024年02月03日
    浏览(47)
  • react+vue 前端国密算法sm2、sm3 、sm4的js ts实现

    1. 简单介绍下SM2 和 SM3 SM2 算法:是一种公钥加密算法,它的密钥长度为 256 位,安全性较高。可用于数字签名、密钥协商等场景。 SM3 算法:是一种对称加密算法,用于消息摘要和数字签名等场景。它的密钥长度为 256 位,安全性较高。SM3 算法与 SM2 算法相互配合,提高了整体

    2024年01月19日
    浏览(32)
  • 【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(四)

    BOM(Browser Object Model): 浏览器对象模型 其实就是操作浏览器的一些能力 我们可以操作哪些内容 获取一些浏览器的相关信息(窗口的大小) 操作浏览器进行页面跳转 获取当前浏览器地址栏的信息 操作浏览器的滚动条 浏览器的信息(浏览器的版本) 让浏览器出现一个弹出

    2024年01月18日
    浏览(39)
  • 快速上手 vue.js <二>

    续 vue 一 组件化的核心思想: 对组件进行拆分,拆分成一个个小的组件 再将这些组件嵌套再一起最终形成我们的应用程序 最终整个程序会变成组件树 父子组件之间的通信: 父组件传递给子组件:通过 props 属性 子组件传递给父组件:通过 $emit 触发事件 7.2.1 父组件传递给子

    2024年01月22日
    浏览(46)
  • React学习——快速上手

    https://php.cn/faq/400956.html 1、可以手动使用npm来安装各种插件,来从头到尾自己搭建环境。 如: 2、脚手架 create-react-app https://react.dev/learn/tutorial-tic-tac-toe 官方文档的井字游戏案例 1、分解组件 2、构建静态版本 可以“自上而下”地构建组件,从层次结构中较高的组件开始构建,

    2024年02月22日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包