首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在本机屏幕之间传递数据(从屏幕A到屏幕B到屏幕C)

在本机屏幕之间传递数据(从屏幕A到屏幕B到屏幕C)
EN

Stack Overflow用户
提问于 2020-05-02 07:33:23
回答 3查看 3.3K关注 0票数 4

考虑下面的场景。基本上,我们有一个嵌套在MaterialTopTabNavigator中的StackNavigator

如何将数据从函数一直传递到MaterialTopTabNavigator。请注意,MaterialTopTabNavigator必须首先通过StackNavigator

file1.js

代码语言:javascript
复制
const[test,setTest] = useState('testing');
function moveToResults(){
    navigation.navigate('Results', test)
}

这里我们有一个简单的函数,它使应用程序导航到另一个屏幕,并通过test的状态。当moveToResults()被调用时,我们需要:

file2.js //注意到PostFun是StackNavigator的主页。

代码语言:javascript
复制
const Tab = createMaterialTopTabNavigator();

function PostFun({navigation}) {
  return (

         <Tab.Navigator 
            initialRouteName="Feed"
            activeColor="#e91e63"
            tabBarOptions={{
                labelStyle: {fontSize:12, color:"#faa19b"},
                tabStyle: {height:65, justifyContent: "flex-end"},
            }}
            style={styles.header}>
                <Tab.Screen name="Activity" component={FindFunActivity} />
                <Tab.Screen name="Event" component={FindFunEvent} />
        </Tab.Navigator>

  );
}

is是“`MaterialTopTabNavigator”的开头,您可以看到这个导航有两个顶部选项卡(活动和事件)。

其中一个选项卡可能看起来类似,这就是我需要我的变量显示的地方:

file3.js

代码语言:javascript
复制
const FindFunEvent = (navigation) =>{
return(
<View>
    <Text>{navigation.getParam()}</Text>
</View>
)

}

问题

如何使test变量显示在FindFunEvent组件中?

这比任何事情都难解释,如果你愿意的话,这里有一个直观的解释。

这是一个关于这个问题的短片的链接。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-04 22:45:01

您可以将该值作为组件的支柱传递给它,从而使其正常工作:

file1.js

代码语言:javascript
复制
const[test, setTest] = useState('testing');

function moveToResults(){
    navigation.navigate('Results', { test: test })
}

file2.js

代码语言:javascript
复制
const Tab = createMaterialTopTabNavigator();

function PostFun({ route, navigation }) {
  const { test } = route.params;

  return (
        <Tab.Navigator 
            initialRouteName="Feed"
            activeColor="#e91e63"
            tabBarOptions={{
                labelStyle: {fontSize:12, color:"#faa19b"},
                tabStyle: {height:65, justifyContent: "flex-end"},
            }}
            style={styles.header}
        >
          <Tab.Screen name="Activity">
              { (props) => <FindFunActivity {...props} myProp='test'  /> }
          </Tab.Screen>

          <Tab.Screen name="Event" component={() => <FindFunEvent test={test} />} />
        </Tab.Navigator>

  );
}

file3.js

代码语言:javascript
复制
const FindFunEvent = ({ test }) => {
  return(
    <View>
      <Text>{ test }</Text>
    </View>
  )
}

类似的例子可以在这里查看:https://snack.expo.io/UDHVnSUwK

票数 4
EN

Stack Overflow用户

发布于 2020-05-03 03:33:45

假设您想导航并将屏幕A中的值传递给屏幕B和屏幕C。您可以这样做

ScreenA

代码语言:javascript
复制
this.props.navigation.navigate('ScreenB',
   {value: 'hi', });
}

屏幕B

代码语言:javascript
复制
this.props.navigation.navigate('ScreenC',
    this.props.route.params.value);
}

屏幕C

代码语言:javascript
复制
 this.props.route.params.value
票数 0
EN

Stack Overflow用户

发布于 2020-05-03 20:35:06

这样做的一个简单方法是使用global.data。当您使用全局变量时,您可以在应用程序中的任何地方使用它。但这并不理想,因为使用全局编程并不是最佳实践。我不完全确定你想要的是可能的,如果不是的话,你可以使用全局的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61555900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档