You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
const{ connectToDevTools }=require('react-devtools-core/backend')connectToDevTools({// host: string (defaults to "localhost") - Websocket will connect to this host.// port: number (defaults to 8097) - Websocket will connect to this port.// useHttps: boolean (defaults to false) - Websocket should use a secure protocol (wss).// websocket: Custom websocket to use. Overrides host and port settings if provided.})
2. 魔改 WebSocket
因为小程序的 WebSocket API 不遵循 Web 规范,因此需要使用小程序的 API 实现一个遵循 Web 规范的 WebSocket 对象。
支付宝小程序的 WebSocket 规范和其它小程序不一样,需要另外改造
// 假设已实现了一个遵循 Web 规范的 WebSocket 对象constws=newWebSocket('ws://127.0.0.1:8097')connectToDevTools({// 可以传入自定义 websocket 对象,代替 new window.WebSocket(url)websocket: ws})
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
概述
支持在开发小程序时使用 React DevTools。
动机
增强使用 React 开发 Taro 应用的开发体验。
使用案例
1. 安装
在项目中安装 Taro 插件:
2. 配置 Taro 插件
在 Taro 编译配置中配置使用
@tarojs/plugin-react-devtools
:3. 编译项目
详细设计
一、React DevTools 实现
React DevTools 主要分为 frontend 和 backend 两部分(OVERVIEW):
二、在 Taro 中使用 React DevTools
frontend 不需要调整,开发者安装指定版本的
react-devtools
即可。backend 有下列需要调整的地方:
1. 注入 backend 代码
首先需要把 backend 代码注入 Taro 应用并进行调用:
2. 魔改 WebSocket
因为小程序的 WebSocket API 不遵循 Web 规范,因此需要使用小程序的 API 实现一个遵循 Web 规范的 WebSocket 对象。
完成上述两步,frontend 和 backend 已能够相互通讯,下一步是等待 React 渲染器的接入。
3. 把 React 的核心方法注入到 DevTools
React 渲染器需要调用 react-reconciler 里导出的
injectIntoDevTools
方法,从而把 React 的核心方法注入到 DevTools。如在 ReactDOM 中:
但 Taro 没有使用 ReactDOM,而是基于
react-reconciler
实现了一个自定义渲染器。因此需要在自定义渲染器中调用injectIntoDevTools
,如:3. 处理全局变量
react-reconciler
里使用了全局变量__REACT_DEVTOOLS_GLOBAL_HOOK__
,但在小程序里这样写会报错。因此使用
loader
处理react-reconciler
的代码,把__REACT_DEVTOOLS_GLOBAL_HOOK__
改为window.__REACT_DEVTOOLS_GLOBAL_HOOK__
。(ProvidePlugin
会自动注入window
对象;没有使用definePlugin
是因为和ProvidePlugin
有冲突)缺陷
react-devtools
的版本,更新版本需要修改 taro 插件代码。shallow rendering
,需要注意是否存在副作用。另外,对 devtools 功能的支持不够全面,有些功能需要针对小程序环境魔改 backend 才能实现,欢迎共建~
storage
中记录filters
变化。替代选择
N/A
适配策略
@tarojs/plugin-react-devtools
依赖。react-devtools
。Beta Was this translation helpful? Give feedback.
All reactions