我有一个本机应用程序(4个屏幕),该应用程序使用Azure函数获取数据(返回json对象的数组)。第一个屏幕根据遥测数据(即温度和湿度,警报数量等)呈现数据中心的总体状态。第二个屏幕只是所有数据中心的列表,您可以在其中向下钻取以查看该位置的温度和湿度。这就是我的问题所在。我使用获取的数据设置我的本机应用程序的状态,并在第一个屏幕上正确解析了所有内容。在Windows机器上的expo中,所有屏幕都可以工作(包括警报屏幕,在该屏幕上我创建了另一个javascript对象,该对象是我最初提取的数据的子集)。我需要为IOS编译代码,所以我移至MAC,初始化一个新项目,然后第一个屏幕开始工作,但随后的屏幕不起作用。由于我传递的参数是一个javascript对象,因此会收到不变的违规,并且期望使用字符串。我认为问题是反应导航版本,在我的Windows机器上是2.18.3,在MAC上是3.0。我可以将MAC上的package.json修改为使用相同的版本,然后将Windows机器上的react-navigation文件夹复制到MAC上,以使其按我需要的方式工作吗?
我还没有尝试在package.json中手动设置react-navigation版本,以及将用于react-navigation的module文件夹从我的PC移到Mac,但是会尝试这样做。如果无法解决该问题,我会给出任何反馈,我非常感谢!!!
这是我在MAC和PC上用于屏幕的代码
我从获取数据的主要组件传递数据:
<View>
<Button
backgroundColor = 'grey'
title = 'View Complete Data Center List'
onPress={() => {
this.props.navigation.navigate('Datacenters', { DCdata: this.state.data});
}}
/>
</View>
我在下一个屏幕中捕获数据,然后使用.map函数将其映射出来(这在我的Windows计算机上有效。使用模拟器时,相同的代码在MAC上不起作用)
const { navigation } = this.props;
const datacenterdata = navigation.getParam('DCdata');
return (
<ScrollView>
<List>
{
datacenterdata.map((item, i) => (
<ListItem
key={i}
title={item.Datacenter}
onPress={() => {
this.props.navigation.navigate('Details', {
temp :item.Temp, humid: item.Humid, dc: item.Datacenter,
});
}}
/>
))
}
</List>
</ScrollView>
我需要第二个屏幕才能访问传递给我的javascript对象,并将这些项目呈现为列表(即仅限dc位置)。但是,由于我用于传递数据的方法需要一个字符串,因此我遇到了一个不变的冲突。
答案 0 :(得分:1)
您需要更改检索类型,而不是您的检索类型。
请尝试以下行从导航中获取价值。
this.props.navigation.state.params.DCdata
使用react-navigation
时从导航中获取价值对我来说很正常。
谢谢