gpt4 book ai didi

javascript - 调试为什么 react-native release build 崩溃并且调试一个工作正常

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:28:49 26 4
gpt4 key购买 nike

我在 Debug模式下工作,一切看起来都很好,但是当我将我的应用程序构建到 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 的状态管理库的一部分),它依次返回渲染 Prop ,然后将其作为 Prop 传递给我的组件。

在Debug模式下运行正常,但在Release模式下出现这样的错误

undefined is not an object while evaluating e.state

此错误来自 XCode 调试日志。

我认为 Release 构建过程中的某个地方与 Debug 构建过程中的某处不同,这使得 this.props.AuthState例如 [undefined],当我指定 <Text>{AuthStore.state.username} {RouterStore.state.pathname}</Text> 时会抛出错误我的商店 Prop 未定义,因此我无法访问它们的状态。

我很乐意保留我为商店制作的这个高阶组件,因为它提供了非常好的开发体验,但需要能够调试发布版本中究竟出现了什么问题,到目前为止我还无法做到。

在发布构建期间进行了哪些优化可能会影响此处?

最佳答案

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

问题出在访问 value.constructor.name 时,我假设它始终与我的 Container 名称相同。在缩小过程中这些变化,因此它是未定义的,向类添加唯一标识符解决了这个问题

关于javascript - 调试为什么 react-native release build 崩溃并且调试一个工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50905914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com