使用react-navigation

时间:2019-04-09 14:04:04

标签: react-native

我有一个本机应用程序(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位置)。但是,由于我用于传递数据的方法需要一个字符串,因此我遇到了一个不变的冲突。

1 个答案:

答案 0 :(得分:1)

您需要更改检索类型,而不是您的检索类型。

请尝试以下行从导航中获取价值。

this.props.navigation.state.params.DCdata

使用react-navigation时从导航中获取价值对我来说很正常。

谢谢