vue代码和react代码互转(组件库同步)
背景
有些需要vue和react代码互转的场景
- 比如:组件库之间,相同功能的组件,在vue组件库和react组件库中同步一遍。或者一些模板代码,需要多个版本
手动去同步,数量多了后 还是挺烦的。后面发现有工具可以转换!! 此篇主要介绍一些转换工具(得注意一下 优缺点和注意点,下面会列出来)
以下主要介绍这3种场景:(基本都有开源的工具,可以直接使用)
- vue转react
- react转vue
- vue2转vue3
1. vue转react
- 具体的使用,里面有文档
- (在线浏览站点:http://122.51.132.117/vue2react/ )
优点:
- 多多少少还是可以节省不少时间的
缺点:
- 因为开源库是几年前的,所以较新的api,是不支持的。比如hooks,函数式组件
- 可能会转换出一些过于老的,或废弃的api,需要开发者自己手动调整一下
注意:
- 如果转换失败,注意看报错。
- 实在看不明白报错的话,就把源代码一部分一部分注释掉,最终定位到错误位置。在看看修改一下,还是手动copy一下
- tips:props处经常有问题(导致报错转换失败),还有一些vue独有的api,转换后需要开发者自己去处理,比如$emit(这个不会导致转换失败)
2. react转vue
转换前
import React, { Component } from 'react'
class App extends Component {
constructor() {
super();
this.state = {
hello: 'world'
}
}
componentDidMount () {
console.log(this.state)
}
myMethod () {
this.setState({ hello: 'world' })
}
render() {
return (
<div className="App">
<div className="App-header" onClick={this.myMethod}>
<h2>
Hello {this.state.hello}
</h2>
</div>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
)
}
}
export default App
复制代码
转换后
// export component
export default {
name: 'app',
data () {
return {hello: 'world'}
},
methods: {
myMethod () {
this.hello = 'world'
}
},
mounted () {
console.log(this)
},
render () {
return (
<div class="App">
<div class="App-header" onClick={this.myMethod}>
<h2>Hello {this.hello}</h2>
</div>
<p class="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
)
}
}
复制代码
优点(同上):
- 多多少少还是可以节省不少时间的
缺点:
- 因为开源库是几年前的,所以只支持偏旧版本的react和类组件。较新的api是不支持的。比如hooks,函数式组件
- 转换出来的vue是jsx语法版本的,项目内需要配置支持jsx语法
注意:
- 如果转换失败,注意看报错。
- 实在看不明白报错的话,就把源代码一部分一部分注释掉,最终定位到错误位置。在看看修改一下,还是手动copy一下
- tips:只支持偏旧版本的react和类组件。较新的api是不支持的
3. vue2转vue3
用gogocode: gogocode.io/zh/docs/vue…
- 文档非常详细,有兴趣可以点进去看看
总结
vue和react代码互转,有现成的开源工具,但是工具是3,4年前开发的。
- 目前vue和react都更新迭代了一些版本,导致工具可能处理不了较新的代码和api。 还有一些是2个框架的语法差异,能成功转换,但需要开发者手动处理
但整体来说
优点:
- 多多少少还是可以节省不少时间的,但要注意使用条件
缺点:
- 在此文章的上面每一项内都有标注缺点,有兴趣可以拉上去看看。主要是适用范围的缺点
注意点:
- 如果转换失败,注意看报错 (文章的上面每一项内都有标注 注意点,可以细看看)
后续有空来写一篇解释一下代码转换的原理。思路是用 code -> ast -> 处理得到新的ast -> 新code
码字不易,点赞鼓励!!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END