MobX调试工具

mobx-react-devtools 是一个用于调试 MobX+React 项目的工具,它可以追踪组件的渲染以及组件依赖的可观测数据。我们为 BBS 项目添加这个调试工具:

// 安装
npm install mobx-react-devtools --save-dev

只需要在开发环境下使用调试工具,安装命令使用的参数是 --save-dev。

将 mobx-react-devtools 提供的调试组件添加到 App 组件中:

@inject("appStore") // @inject 注入使用的 Store: appStore
@observer // @observer 把 App 组件转化成一个 reaction,自动响应 state 的变化
class App extends Component {
    renderDevTool() {
        if (process.env.NODE_ENV !== "production") {
            const DevTools = require("mobx-react-devtools").default;
            return <DevTools/>;
        }
    }

    render() {
        const {error, isLoading, removeError} = this.props.appStore;
        const errorDialog = error && (
            <ModalDialog onClose={removeError}>{error.message || error}</ModalDialog>
        );

        return (
            <div>
                <Router>
                    <Switch>
                        <Route exact path="/" component={AsyncHome}/>
                        <Route path="/login" component={AsyncLogin}/>
                        <Route path="/posts" component={AsyncHome}/>
                    </Switch>
                </Router>
                {errorDialog}
                {isLoading && <Loading/>}
                {/* 添加MobX调试组件 */}
                {this.renderDevTool()}
            </div>
        );
    }
}

export default App;

再次运行程序,界面右上角会多出三个小图标,这是 mobx-react-devtools 的功能键。点击第一个图标,当组件发生渲染行为时,对应的组件会被高亮显示,高亮组件右上角显示的 3 个数字分别代表截至当前组件渲染的次数、组件 render 方法执行的时间、组件从 render 方法开始到渲染到浏览器界面使用的时间,如图11-2所示。

image 2024 04 25 13 37 35 954
Figure 1. 图11-2

点击第二个图标后,再用鼠标选择任意一个组件,可以查看该组件会对哪些数据的变化做出响应。图11-3显示的是一个 PostItem 组件实例所依赖的数据。

image 2024 04 25 13 38 10 349
Figure 2. 图11-3

点击第三个图标,控制台会输出发生的 action、响应的 reaction 等调试日志信息。