网上没有找到react框架下使用Jtopo的例子。走了一些弯路,终于成功运行了一个第一个demo,分享一下。
最终效果
最初的思路,肯定是要是在JTopo官方下载包,可下载后该如何引用呢?JS的做法是在<script>中直接将包引入,但react由于使用es6语法,是通过import引入各种类库,前提是该类库已经通过npm install命令下载至项目中。
在一切未知的情况下,我搜索了将包发布到npm上的方法,在得知需要改造源码并打包上传等一系列过程之后,选择放弃。而后又产生是否可以像JS一样,将包直接放入工程目录中的想法,import直接引用,简单粗暴,但这也同样需要改造源码。
几乎放弃,但又随手搜索了npm jtopo,惊喜地发现已经有大神把上面的工作给做了。直接npm install jtopo就可以!执行完该命令后刷新项目目录,可以看到Jtopo已经静静躺在里面了。
安装问题解决了之后,就是引用。直接import。
import JTopo from 'jtopo';
关于代码,npm Jtopo发布者的github里有小demo,是用vue写的,很有参考价值。不懂vue,但不至于到看不懂,起码书写上和react是类似的。
还有坑:在创建stage时需要首先取到html中的<canvas>,但如果用JS原生的getElementById,就会报错Cannot read property 'getContext' of undefined,这是由于没有取到dom元素造成的。需要用react语法中的ref来取,原因还不清楚, 盲猜是'use strict'造成的限制。
该坑html部分
<canvas ref="mycanvas" width="910" height="400"></canvas>
该坑代码
const test = {
canvas:this.refs.mycanvas
}
let stage = new JTopo.Stage(test);