taro 生命周期方法 componentDidShow 不执行
环境说明
- taro版本:3.0.2
- taro-cli版本: 3.0.2、3.0.5、3.0.7
- package.json:如下
"dependencies": {
"@babel/runtime": "^7.7.7",
"@tarojs/components": "3.0.2",
"@tarojs/react": "3.0.2",
"@tarojs/runtime": "3.0.2",
"@tarojs/taro": "3.0.2",
"@tdsdk/wxtdapi": "^0.6.1",
"dva-core": "^2.0.2",
"dva-loading": "^3.0.20",
"react": "^16.10.0",
"react-dom": "^16.10.0",
"react-redux": "^7.2.0",
"redux": "^4.0.5",
"taro-ui": "^3.0.0-alpha.3"
},
"devDependencies": {
"@babel/core": "^7.8.0",
"@tarojs/mini-runner": "3.0.2",
"@tarojs/webpack-runner": "3.0.2",
"@types/react": "^16.0.0",
"@types/webpack-env": "^1.13.6",
"babel-preset-taro": "3.0.2",
"del": "^5.1.0",
"eslint": "^6.8.0",
"eslint-config-taro": "3.0.2",
"eslint-plugin-import": "^2.12.0",
"eslint-plugin-react": "^7.8.2",
"eslint-plugin-react-hooks": "^1.6.1",
"stylelint": "9.3.0",
"terser-webpack-plugin": "^3.0.6"
}
原因分析和解决方案
首先从微信原生onShow开始跟踪,发现最终因为inject方法没有被调用所致:

对比另外一个同事可以正常运行的代码,发现存在如下差异:

最终,发现两边的react-redux版本不一致所致。之所以会有差异,是因为package.json中配置的react-redux版本号为^7.2.0,修改为7.2.0问题解决
总结
尽量不要在package.json中使用^来定义版本依赖,避免系统自动升级导致的兼容问题(按标准说,这个其实算是react-redux的bug,毕竟升级最末尾版本号不应该导致兼容问题)
在TaroJS 3.0.2版本中,遇到组件生命周期方法componentDidShow不执行的问题,经排查发现是由react-redux版本号差异引起,将版本号从^7.2.0精确到7.2.0后问题解决。


被折叠的 条评论
为什么被折叠?



