将位置值传递给 React Native 中的另一个组件

Posted

技术标签:

【中文标题】将位置值传递给 React Native 中的另一个组件【英文标题】:Passing location value to another component in React native 【发布时间】:2018-09-23 14:25:32 【问题描述】:

我正在尝试将纬度和经度值(使用主屏幕中的 navigator.geolocation 获取)发送到详细信息屏幕,但详细信息页面接收的不是实际值,而是空值。这是我的代码:

import React from 'react';
import  View, Text, Button  from 'react-native';
import  createStackNavigator  from 'react-navigation';

class HomeScreen extends React.Component 

constructor(props) 
    super(props);
    this.state = 
    latitude: null,
    longitude: null,
    error: null,
    ;




render() 
    return (
        <View style= flex: 1, alignItems: 'center', justifyContent: 'center' >
          <Button title="Add New Outlet" onPress=() => 
                navigator.geolocation.getCurrentPosition(
                        (position) => 
                                        this.setState(
                                        latitude: position.coords.latitude,
                                        longitude: position.coords.longitude,
                                        error: null,
                                        );
                                    ,
                        (error) => this.setState( error: error.message ),
                         enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 ,
                    );

                this.props.navigation.navigate('Details', latitude: this.state.latitude, longitude: this.state.longitude,);
            />
        </View>
        );
    




class DetailsScreen extends React.Component 

render() 
    const  navigation  = this.props;
    const latitude = navigation.getParam('latitude', 'NO-ID');
    const longitude = navigation.getParam('longitude', 'some default value');
    return (
        <View style= flex: 1, alignItems: 'center', justifyContent: 'center' >
          <Text>Details Screen</Text>
          <Text>latitude: JSON.stringify(latitude)</Text>
          <Text>longitude: JSON.stringify(longitude)</Text>
        </View>
        );
    


const RootStack = createStackNavigator(

    Home: HomeScreen,
    Details: DetailsScreen,
,

    initialRouteName: 'Home',

);

export default class App extends React.Component 
  render() 
return <RootStack />;
  

组件之间的值已成功传递,但当前状态值未传递。请帮助...

【问题讨论】:

【参考方案1】:

这可能是this.setState() 的异步性质问题。试着稍微修改一下代码。不要在this.setState() 之后调用this.props.navigation.navigate(),而是尝试在回调中的this.setState() 作为第二个参数调用它。以下是你可以做到的:

this.setState(
    latitude: position.coords.latitude,
    longitude: position.coords.longitude,
    error: null,
, () => 
    this.props.navigation.navigate('Details', latitude: this.state.latitude, longitude: this.state.longitude,)
);

我希望这会有所帮助。让我知道它是否有效。

【讨论】:

以上是关于将位置值传递给 React Native 中的另一个组件的主要内容,如果未能解决你的问题,请参考以下文章

重定向到 React 中的另一条路线时如何传递状态/道具?

如何将一个道具作为变量传递给 React 中的另一个道具?

如何将带有 Redux 的徽章值传递给 React Native 上的 BottomTabBar

将 Ansible 变量从一个角色(在一个主机上运行)传递给在同一剧本中的另一台主机上运行的另一个角色

React Native 将 Component/Object 属性传递给 OnPress 函数

如何将组件中的道具传递给 FlatList renderItem