TAT.dnt 为 React 扩展 jsReady
In 未分类 on 2015年04月29日 by view: 2,057
2

写在前面

因为用 React 就会需要写jsx
React 会将 jsx 编译成 js。然后 append 到 head 当中。从 fiddler 的请求和 JSXTransformer 源码来看,当在页面使用下面的 html 时候:

会发送两次请求 react_test.js 文件,一次是 JSXTransformer 发送的,一次是浏览器识别 script 标签自动发送的。
上面的 react_test.js 里面全是jsx语法,和 javascript 有点像,如:

现在问题来了:

上面打印的信息的是 undefined。所以迫切地希望能够有个这样的事件,这样就能拿到 Timer,也就能够调用它的相关方法:

主要是为了让封装的多个组件能够更加直接的调用,希望 jsx 以外的 js 文件能够拿到 jsx 内部定义的对象,或者 React.render 的返回值(React.render 的返回值就是该对象的实例)。如:

react_jsready.js

上面是 UMD 的写法,据说现在已经有 AMD\CMD\UMD\KMD 了 = =!

第一步: 在 react 和 JSXTransformer 下方引用 react_jsready.js

第二步: 注释掉 JSXTransformer.js 中的

第三步:JSXTransformer.js 中

这里就不依依列举了,下方了提供演示地址,可自行下载 JSXTransformer.js。
这里的基本原理就是计数,当执行了的 jsx 和页面的 jsx(包括页面内嵌和外链的)的个数相等的时候,去执行注册的回调函数。
这里需要注意的是:如果不需要 jsready 这功能,也需要引用该 js,因为已经把 JSXTransformer.js 中的 runScripts 禁用掉了暴露给外部调用:),改由 jsready 触发。

地址

点击这里: jsready demo
React 的 Class base 的风格还是非常讨人喜欢的,自我感觉 jsready 这个特性非常重要,刚接触 reactjs 半天= =!,欢迎吐槽:)

原创文章转载请注明:

转载自AlloyTeam:http://www.alloyteam.com/2015/04/wei-react-kuo-zhan-jsready/

  1. Axes 2015 年 4 月 29 日

    线上环境一般都不会去引用 JSXTransformer.js 吧,太笨重了,基本上都是用 react tool 将 jsx 编译成 js 后才发布

    • TAT.dnt

      TAT.dnt 2015 年 4 月 29 日

      嗯嗯。我已经修改成编译后没有 jsx 后 ready 的 callback 也能自动执行,所以开发时和发布时代码不用改。

发表评论