我在调试模式下工作,一切似乎都很好,但是当我将我的应用程序构建到TestFlight(即发布版本)时,它在LaunchScreen上崩溃了。
经过一段时间的调试后,我将问题缩小到以下代码
import React from 'react'
import { Subscribe } from 'unstated'
const getStoreAsProps = (storeArr) => {
const storeProps = {}
storeArr.map(value => (storeProps[value.constructor.name] = value))
return storeProps
}
const withStore = (...args) => (Element) => () => (
<Subscribe to={[...args]}>{(...args) => <Element {...getStoreAsProps(args)} />}</Subscribe>
)
export default withStore
其工作方式如下
import React from "react"
import { Text } from "react-native"
import AuthStore from "./store/Auth"
import RouterStore from "./store/Router"
import withStore from "./store"
class MyComponent extends React.Component {
render() {
const {AuthStore, RouterStore} = this.props
return <Text>{AuthStore.state.username} {RouterStore.state.pathname}</Text>
}
}
export default withStore(AuthStore, RouterStore)(MyComponent)
所以基本上withStore
是一个更高阶的组件,可以接受任意数量的参数,在本例中为Stores
并将它们传递给Subscribe
组件(这是状态管理库的一部分)我正在使用名为unstaded),它反过来返回渲染道具,然后作为道具传递给我的组件。
它在调试模式下工作正常,但在发布模式下我收到这样的错误
在评估e.state 时,undefined不是对象
XCode调试日志中的此错误。
我觉得Release版本中的某些东西与Debug版本不同,例如[{1}}例如[undefined],并且当我指定我的Store道具未定义的this.props.AuthState
时抛出错误,因此我无法进入他们的州。
我喜欢保留我为商店制作的高阶组件,因为它可以提供非常好的开发体验,但需要能够调试发布版本中的确切内容,到目前为止我无法做。
在发布版本中进行哪些优化可能会对此产生影响?
答案 0 :(得分:0)
答案来自:https://github.com/facebook/metro/issues/182#issuecomment-398052619
问题在于访问value.constructor.name
我认为它始终与我的Container
名称相同。在缩小期间,这些更改,因此未定义,向类添加唯一标识符可解决问题