学习react的时候, 自身我工作中应用的都是vue, 应用想通过vue的应用去解析react的写法,
发现vue3的写法有挺多种的,和react17 也有不同的写法
于是就产生这篇文章, 有哪些不正确心愿大佬斧正
Vue(setup)写法
父组件(Parent.vue)
# Parent.vue<template> <div> <p>{{ count }}</p> <Child :count="count" @setCount="setCount"></Child> </div></template><script setup lang="ts">import { ref } from "vue";import Child from "./Child.vue";let count = ref(0);function setCount(param: typeof count.value) { count.value = param;}</script>
子组件(child.vue)
# Child.vue<template> <div> <button @click="emit('setCount', ++count)">按钮</button> </div></template><script setup lang="ts">defineProps<{ count: number }>();const emit = defineEmits<{ (e: "setCount", count: number): void;}>();</script>
子组件(newChild.vue) 第二种写法
# newChild.vue<template> <div> <button @click="$emit('setCount', count + 1)">按钮2</button> </div></template><script lang="ts">import { ref, defineComponent } from "vue";export default defineComponent({ props: { count: { type: Number, require: true, default: 0, }, }, emits: ["setCount"],});</script>
React写法
父组件(Parent.tsx)
# Parent.tsximport { useState } from "react";import Child from "./newChild";function Parent() { let [count, setCount] = useState(0); return ( <div> <p>{count}</p> <Child count={count} setCount={setCount}></Child> </div> );}export default Parent;
子组件(Child.ts)
# Child.tsinterface ChildInterface { count: number; setCount: (params: ChildInterface["count"]) => void;}interface ChildProps extends React.FC<ChildInterface> {}const Child: ChildProps = (props) => { let { count, setCount } = props; return ( <div> <button onClick={() => { setCount(++count); }} > 按钮 </button> </div> );};export default Child;
子组件(newChild.ts) 第二种写法
# newChild.tsimport React from "react";interface ChildProps { count: number; setCount: (params: ChildProps["count"]) => void;}class Child extends React.Component<ChildProps> { render() { let { count, setCount } = this.props; return ( <div> <button onClick={() => { setCount(++count); }} > 按钮 </button> </div> ); }}export default Child;