调试为什么react-native release build破解和调试一个正常工作

时间:2018-06-18 09:00:25

标签: javascript ios reactjs react-native

我在调试模式下工作,一切似乎都很好,但是当我将我的应用程序构建到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时抛出错误,因此我无法进入他们的州。

我喜欢保留我为商店制作的高阶组件,因为它可以提供非常好的开发体验,但需要能够调试发布版本中的确切内容,到目前为止我无法做。

在发布版本中进行哪些优化可能会对此产生影响?

1 个答案:

答案 0 :(得分:0)

答案来自:https://github.com/facebook/metro/issues/182#issuecomment-398052619

问题在于访问value.constructor.name我认为它始终与我的Container名称相同。在缩小期间,这些更改,因此未定义,向类添加唯一标识符可解决问题