支付宝小程序
小程序基础库: -
使用框架: React
import Taro from "@tarojs/taro";
const env = Taro.getEnv(); // ReferenceError: Taro is not defined
if (env === "WEAPP") {
//
}else{
//
}
const store = configStore();
class App extends Component {
constructor() {
super(...arguments);
this.sensors = {
track: () => {},
};
}
componentDidMount() {}
componentDidShow() {}
componentDidHide() {}
componentDidCatchError() {}
// 在 App 类中的 render() 函数没有实际作用
// 请勿修改此函数
render() {
return <Provider store={store}>{this.props.children}</Provider>;
}
}
export default App;
// 在页面中执行
Taro.getApp().sensors.track() // 报错
希望可以和2.x版本一致 可以正常获取constructor中新增属性
error
Taro v3.0.0
Taro CLI 3.0.0 environment info:
System:
OS: macOS 10.14.6
Shell: 5.3 - /bin/zsh
Binaries:
Node: 10.15.0 - /usr/local/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 6.14.6 - /usr/local/bin/npm
npmPackages:
@tarojs/components: 3.0.0 => 3.0.0
@tarojs/mini-runner: 3.0.0 => 3.0.0
@tarojs/react: 3.0.0 => 3.0.0
@tarojs/runtime: 3.0.0 => 3.0.0
@tarojs/taro: 3.0.0 => 3.0.0
@tarojs/webpack-runner: 3.0.0 => 3.0.0
babel-preset-taro: 3.0.0 => 3.0.0
eslint-config-taro: 3.0.0 => 3.0.0
react: ^16.10.0 => 16.13.1
npmGlobalPackages:
typescript: 3.5.3
@persist-xyz
process.env.TARO_ENV 做判断,代替 Taro.getEnv()Taro.getApp() 等于小程序原生的 getApp(),获取到的是小程序的 app 实例,Taro 3 中开发者写的 App 入口组件不等于小程序 app 实例,只是一个 React 组件。因此你可以通过 Current.app 获取 App 入口组件。import { Current } from '@tarojs/taro'
Current.app.sensors.track()
@persist-xyz
- 使用
process.env.TARO_ENV做判断,代替Taro.getEnv()Taro.getApp()等于小程序原生的getApp(),获取到的是小程序的 app 实例,Taro 3 中开发者写的 App 入口组件不等于小程序 app 实例,只是一个 React 组件。因此你可以通过Current.app获取 App 入口组件。import { Current } from '@tarojs/taro' Current.app.sensors.track()
Current.app 返回的值只是app.config中定义的内容,也还是拿不到新增的属性, 和Taro.getApp()中返回的config是一样的
@persist-xyz
- 使用
process.env.TARO_ENV做判断,代替Taro.getEnv()Taro.getApp()等于小程序原生的getApp(),获取到的是小程序的 app 实例,Taro 3 中开发者写的 App 入口组件不等于小程序 app 实例,只是一个 React 组件。因此你可以通过Current.app获取 App 入口组件。import { Current } from '@tarojs/taro' Current.app.sensors.track()Current.app 返回的值只是app.config中定义的内容,也还是拿不到新增的属性, 和Taro.getApp()中返回的config是一样的
是的,有什么方法可以解决吗?暂时不升级3.x了,等再稳定一段时间的 😂
同样遇到了问题,想再app.js里面定义一些全局属性挂在app上,但是发现做不到
直接在Current.app上添加属性就好了~
ps:
// 注册
import { Current } from '@tarojs/taro'
Current.app.sensors = ()=> {}
// 使用
import { Current } from '@tarojs/taro'
Current.app.sensors.track()
同样遇到了问题,在App上注入了变量,后面使用Taro.getApp()得不到了。
小程序转换为taro代码后,页面中的Taro.getApp()都获取不到App定义的属性了,这难道不是个bug吗。如果改造的话成本有点高吧
这个问题阻碍我们从2.x升级到 3.x,请问有workaround吗?
@Chen-jj 这个问题不应该关闭把。
@xsq007 可以使用 taroGlobalObject 去实现
// app.js
class App extends Component {
taroGlobalData = {
x () {
console.log('i m x')
}
}
}
// index.js
class Index extends Component {
componentDidMount () {
const app = Taro.getApp()
app.x()
}
}
@Chen-jj 可以使用 taroGlobalObject 去实现
// app.js
class App extends Component {
taroGlobalData = {
x () {
console.log('i m x')
}
}
}
// index.js
class Index extends Component {
componentDidMount () {
const app = Taro.getApp()
app.x()
}
}
使用上述代码提示:react-reconciler.production.min.js:106 TypeError: app.x is not a function