在 React Navigation 5 中传递参数
Passing params in React Navigation 5
-
react-native
-
react-navigation
-
react-navigation-stack
-
react-navigation-bottom-tab
-
react-navigation-v5
我正在尝试在选项卡导航器之间传递一些参数。下面是我的程序的结构。 粗体是路线
App(选项卡导航器):{ Main(堆栈)& Filter(屏幕)}
Main(堆栈导航器):{ Home(屏幕)& MediaDetails(屏幕)}
我在屏幕上有一个 按钮 与 Filter 关联,它有一个 onPress() 功能。我传递了一些参数(但为了这个问题,我们只考虑参数 到 )。
this.props.navigation.navigate('Home', {
to: this.state.to,
}
现在在与 Home 关联的屏幕中,我正在读取状态中的参数,如下所示:
state = {
to: this.props.route.params.to
}
在App.js里面,我设置了的初始值到 像这样成为“2020”:
<Stack.Screen
name="Home"
component={HomeScreen}
initialParams={{
to: '2020'
}}
/>
初始值确实设置为2020。我按下按钮。假设我将 设置为 到 1900。在 this.props.navigation.navigate 执行之前,我 console.log(this.state.to) 值,它确实更新为 1900。但是,随着屏幕变为 Home,该值恢复为 2020(通过 console.log 观察)
有人可以指出这种怪异行为的原因吗?我一直在尝试调试它很多个小时,但没有运气。 React Navigation 5 也很新,所以在网上找不到类似的东西。任何帮助将不胜感激。感谢大家一路阅读
编辑:问题已解决,完整代码已删除!
我通过 在 shouldComponentUpdate().
中更新状态 解决了这个问题
此错误是由于屏幕保持安装状态而未更新状态。
这是可能的,因为 ravirajn22 在 GitHub 上向我解释了这个错误背后的原因和可能的解决方案.
Link 回复: https://github.com/react-navigation/react-navigation/issues/6863
/* 1. 使用参数导航到 Details 路由 */
onPress={() => {
navigation.navigate('Details', {
itemId: 86,
otherParam: 'anything you want here',
});
}}
/* 2. 获取参数 */
const DetailsScreen = ({ route, navigation }) => {
const { itemId } = route.params;
const { otherParam } = route.params;
return (
<View></View>
);
};
正如Here所述,您可以这样做:
navigation.navigate('otherStackName', {
screen: 'destinationScreenName',
params: { user: 'jane' },
});
在功能组件中写这样简单的逻辑:-
- 在父组件中
<TouchableOpacity onPress={()=>navigation.navigate('childRoute', {data_Pass_to_Child: "Hello I am going to child component"})}>
- 在子组件中
const Chat = ({route}) => {
console.log(route.params.data_Pass_to_Child);
return(whatever based on your UI)
}
注意:
将 childRoute
替换为 您的路线名称 并将数据 {data_Pass_to_Child: "Hello I am going to child component"}
替换为您要传递的任何数据。
发送
props.navigation.navigate('YourScreenName', {
your_key: any_value
});
收到 YourScreenName.js
var valueReceived = props.navigation.state.params.your_key;
react-native
react-navigation
react-navigation-stack
react-navigation-bottom-tab
react-navigation-v5
我正在尝试在选项卡导航器之间传递一些参数。下面是我的程序的结构。 粗体是路线
App(选项卡导航器):{ Main(堆栈)& Filter(屏幕)}
Main(堆栈导航器):{ Home(屏幕)& MediaDetails(屏幕)}
我在屏幕上有一个 按钮 与 Filter 关联,它有一个 onPress() 功能。我传递了一些参数(但为了这个问题,我们只考虑参数 到 )。
this.props.navigation.navigate('Home', {
to: this.state.to,
}
现在在与 Home 关联的屏幕中,我正在读取状态中的参数,如下所示:
state = {
to: this.props.route.params.to
}
在App.js里面,我设置了的初始值到 像这样成为“2020”:
<Stack.Screen
name="Home"
component={HomeScreen}
initialParams={{
to: '2020'
}}
/>
初始值确实设置为2020。我按下按钮。假设我将 设置为 到 1900。在 this.props.navigation.navigate 执行之前,我 console.log(this.state.to) 值,它确实更新为 1900。但是,随着屏幕变为 Home,该值恢复为 2020(通过 console.log 观察)
有人可以指出这种怪异行为的原因吗?我一直在尝试调试它很多个小时,但没有运气。 React Navigation 5 也很新,所以在网上找不到类似的东西。任何帮助将不胜感激。感谢大家一路阅读
编辑:问题已解决,完整代码已删除!
我通过 在 shouldComponentUpdate().
中更新状态 解决了这个问题此错误是由于屏幕保持安装状态而未更新状态。
这是可能的,因为 ravirajn22 在 GitHub 上向我解释了这个错误背后的原因和可能的解决方案.
Link 回复: https://github.com/react-navigation/react-navigation/issues/6863
/* 1. 使用参数导航到 Details 路由 */
onPress={() => {
navigation.navigate('Details', {
itemId: 86,
otherParam: 'anything you want here',
});
}}
/* 2. 获取参数 */
const DetailsScreen = ({ route, navigation }) => {
const { itemId } = route.params;
const { otherParam } = route.params;
return (
<View></View>
);
};
正如Here所述,您可以这样做:
navigation.navigate('otherStackName', {
screen: 'destinationScreenName',
params: { user: 'jane' },
});
在功能组件中写这样简单的逻辑:-
- 在父组件中
<TouchableOpacity onPress={()=>navigation.navigate('childRoute', {data_Pass_to_Child: "Hello I am going to child component"})}>
- 在子组件中
const Chat = ({route}) => {
console.log(route.params.data_Pass_to_Child);
return(whatever based on your UI)
}
注意:
将 childRoute
替换为 您的路线名称 并将数据 {data_Pass_to_Child: "Hello I am going to child component"}
替换为您要传递的任何数据。
发送
props.navigation.navigate('YourScreenName', {
your_key: any_value
});
收到 YourScreenName.js
var valueReceived = props.navigation.state.params.your_key;