前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >写给vue转react的同志们(3)

写给vue转react的同志们(3)

作者头像
饼干_
发布2022-09-19 15:11:35
4230
发布2022-09-19 15:11:35
举报
文章被收录于专栏:饼干的前端专栏

本系列文章将由浅慢慢深入,一步步带你领略react和vue的同工异曲之处,让你左手react,右手vue无忧。

前提要顾:

写给vue转react的同志们(1)

写给vue转react的同志们(2)

我们都知道vue上手比较容易是因为他的三标签写法以及对指令的封装,他更像一个做好的包子你直接吃。

相比react他的纯js写法,相对来说自由度更高,这也意味着很多东西你需要自己手动封装,所以对新手没那么友好,所以他更像面粉,但可以制作更多花样的食物。

今天的主题

  • react 计算属性
  • react ref

react 计算属性

我们知道vue中有提供computed让我们来实现计算属性,只要依赖改变就会发生变化,那么react中是没有提供的,这里我们需要自己手动实现计算属性。简单举例一下:

vue 计算属性

代码语言:javascript
复制
<template>
    <div>{{ vue_computed }}</div>
</template>

<script>
export default {
    data() {
        msg: 'hello vue'
    },
    computed: {
        vue_computed() {
            return this.msg
        }
    },
    mounted() {
        setTimeout(() => {
            this.msg = 'hello vue change'
        }, 2000)
    }
}
</script>

react 计算属性(类写法)

代码语言:javascript
复制
class App extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            msg: 'hello react'
        }
    }
    get react_computed() {
        return this.state.msg
    }
    componentDidMount() {
        setTimeout(() => {
            this.setState({
                msg: 'hello react change'
            })
        }, 2000)
    }
    render() {
        return (
            <div>
                { this.react_computed }
            </div>
        )
    }
    
}

可以看到react中我们手动定义了get来让他获取msg的值,从而实现了计算属性,实际上vue中的computed也是基于get和set实现的,get中收集依赖,在set中派发更新。

react ref

vue中的ref使用起来也是非常简单在对应组件上标记即可获取组件的引用,那么react中呢? react中当然也可以像vue一样使用,但官方并不推荐字符串的形式来使用ref,并且在react16.x后的版本移除了。

看一段大佬描述:

  • 它要求 React 跟踪当前呈现的组件(因为它无法猜测this)。这让 React 变慢了一点。
  • 它不像大多数人所期望的那样使用“渲染回调”模式(例如<DataGrid renderRow={this.renderRow} />),因为 ref 会因为DataGrid上述原因而被放置。
  • 它不是可组合的,即如果一个库在传递的子组件上放置了一个引用,用户不能在它上面放置另一个引用。回调引用是完全可组合的。

举例:

vue ref

代码语言:javascript
复制
<template>
    <div>
        <el-input v-model='value' ref='input'/>
    </div>
</template>

<script>
export default {
    data() {
        value: ''
    },
    mounted() {
        console.log(this.$refs.input)
    }
}
</script>

react ref

代码语言:javascript
复制
class App extends React.Component {
    myRef = React.createRef()
    constructor(props) {
        super(props)
    }
    render() {
        return (
            <div>
                // 正常使用
                <Input ref='input' />
                // 回调使用(可组合)
                <Input ref={input => this['input-' + index]} />
                // 调用api(react16.x)
                <Input ref={myRef}/>
            </div>
        )
    }
    
}

vue中的ref我们不必多言,看看react的,官方更推荐第三种用法(react16.x),第二种用法在更新过程中会被执行两次,通过在外部定义箭头函数使用即可,但是大多情况都是无关紧要。第一种用法在react16.x后的版本被废弃了。

总结

都到这篇了,相信你转型react上手业务基本没问题了,后续将慢慢深入两大框架的对比,重点叙述react,vue辅之。

我是饼干,让我们一起成长。最后别忘记点赞关注收藏三连击🌟

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • react 计算属性
  • react ref
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档