没有出现 mobx warning 的话需要重写生成模块的代码吗

来源:3-8 服务端问题解决mobx的warning以及增加title等SEO友好标签

ApOLO

2018-09-13

如题所示.
在我的开发环境中并没有出现 multiple mobx instances 的的信息. 但是如果在 webpack 服务器打包配置中定义了 external, 就会遇到 react is not defined 的异常.

问题1

那么问题来了, 如果没有出现multiple mobx instances warning的话我需要重写生成模块的代码吗?

问题2: webpack 打包配置中 external 的必要性

定义了 webpack 打包配置中的 external 后, 可以减小 server-entry bundle 的体积, 但是renderToString 的结果是 react 组件的输出 markup , 那么实际 http 传输过程中的数据大小会有变化吗?

问题3: 为什么会出现 react is not defined

最后的问题是为什么会遇到 react is not defined 的问题呢?
之所以有这个疑问是因为我之前写了一个 react & react router 4 SSR 的 demo 点击这里查看, 同样的设置了 webpack 打包配置的 external 选项, 但是并没有遇到这个异常.

写回答

2回答

ApOLO

提问者

2018-09-17

虽然我在使用 mobx 5 的时候并没有遇到这个问题, 但还是自问自答一下吧.  


出现   There are multiple mobx instances actives  的原因: 

简而言之, 是由于错误的 import 方式和项目 dependencies  设置导致的, 当具有嵌套/引用关系的 模块各自创建了 observer 组件, 而每个模块各自创建了 mobx 实例.


解决办法

  1.  Don't import from "mobx/lib/something"

  2.  配置项目依赖, 让子组件使用同一个 mobx 来管理 observer 和 observables

参考: what is the problem and how to solve it

0
0

Jokcy

2018-09-14

你有配置webpack打包的模式是`node`么?还有就是`libiaryTarget`是`commonjs2`,因为是在服务端运行的,只需要打包成node的包模式就行,不需要跟运行在浏览器端一样把所有内容打包成一个文件,而且可以使用node包加载器的缓存,提高效率。

0
0

React全栈+服务器渲染(ssr)打造社区Webapp

【毕设面试】只会写业务代码?out了,带你学会搭建属于自己的工程!

768 学习 · 414 问题

查看课程