Javascript React Native,在选项卡导航器中按下选项卡时,如何将参数传递到屏幕?
我有一个使用堆栈导航器的函数,其中有一个嵌套的选项卡导航器。在“ConnectScreen”上获得代码后,我想将代码传递到选项卡导航器内部的“FeedScreen”。该代码可以作为route.params.code在Home函数中访问。然后我想把代码传递给FeedScreenJavascript React Native,在选项卡导航器中按下选项卡时,如何将参数传递到屏幕?,javascript,react-native,expo,react-navigation,react-native-tabnavigator,Javascript,React Native,Expo,React Navigation,React Native Tabnavigator,我有一个使用堆栈导航器的函数,其中有一个嵌套的选项卡导航器。在“ConnectScreen”上获得代码后,我想将代码传递到选项卡导航器内部的“FeedScreen”。该代码可以作为route.params.code在Home函数中访问。然后我想把代码传递给FeedScreen function ConnectScreen({ navigation, route }) { const [request, response, promptAsync] = useAuthRequest(
function ConnectScreen({ navigation, route }) {
const [request, response, promptAsync] = useAuthRequest(
{
clientId: 'xxx',
scopes: [
"user-top-read",
"user-read-currently-playing",
"user-read-playback-state",
"user-modify-playback-state",
],
usePKCE: false,
redirectUri: makeRedirectUri({
native: 'your.app://redirect',
}),
},
discovery
);
const [state, setState] = React.useState({
token: null
})
React.useEffect(() => {
if (response?.type === 'success') {
var clientId = 'xxx'
var clientSecret = 'xxx'
var credsB64 = btoa(`${clientId}:${clientSecret}`)
var accessCode = response.params.code
var redirectUri = "xxx"
}
const tokenResponse = fetch('https://accounts.spotify.com/api/token', {
method: 'POST',
headers: {
Authorization: `Basic ${credsB64}`,
},
body: `grant_type=authorization_code&code=${accessCode}&redirect_uri=${redirectUri}`,
}).then((response) => response.json())
.then((responseJSON) => {
if (responseJSON.access_token) {
var token = responseJSON.access_token
setState({
token: token
})
}
})
}, [response]);
return (
<View style={styles.container}>
<Button
disabled={!request}
title="Connect to Spotify"
onPress={() => {
promptAsync()
}}
/>
<Button
title="Home"
onPress={() =>
navigation.navigate('Home', {
screen: 'FeedScreen',
params: {
code: state.token,
}
})
}
/>
</View>
);
}
class FeedScreen extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Home Screen</Text>
</View>
);
}
}
const HomeTab = createBottomTabNavigator();
function Home({ route}) {
console.log("HOME TAB ROUTE",route.params.code)
return (
<HomeTab.Navigator>
<HomeTab.Screen name= "Feed" component={FeedScreen} />
<HomeTab.Screen name= "Player" component={PlayerScreen} />
<HomeTab.Screen name= "Search" component={SearchScreen} />
</HomeTab.Navigator>
)
}
const Stack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="Splash"
component={SplashScreen}
/>
<Stack.Screen
name="Login"
component={LoginScreen}
/>
<Stack.Screen
name="Connect"
component={ConnectScreen}
/>
<Stack.Screen
name="Home"
component={Home}
/>
</Stack.Navigator>
</NavigationContainer>
函数连接屏幕({导航,路由}){
const[request,response,promptAsync]=useAuthRequest(
{
客户ID:'xxx',
范围:[
“用户顶端读取”,
“用户读取当前正在播放”,
“用户读取播放状态”,
“用户修改播放状态”,
],
usePKCE:false,
redirectUri:makeRedirectUri({
土生土长的:“你的。app://redirect',
}),
},
发现
);
常量[状态,设置状态]=React.useState({
令牌:空
})
React.useffect(()=>{
如果(响应?.type=='success'){
var clientId='xxx'
var clientSecret='xxx'
var credsB64=btoa(`${clientId}:${clientSecret}`)
var accessCode=response.params.code
var redirectUri=“xxx”
}
const tokenResponse=fetch('https://accounts.spotify.com/api/token', {
方法:“POST”,
标题:{
授权:`Basic${credsB64}`,
},
正文:`grant\u type=authorization\u code&code=${accessCode}&redirect\u uri=${redirectUri}`,
}).then((response)=>response.json())
.然后((responseJSON)=>{
if(responseJSON.access\u令牌){
var token=responseJSON.access\u token
设定状态({
令牌:令牌
})
}
})
}[答复];
返回(
{
promptAsync()
}}
/>
导航。导航('Home'{
屏幕:“FeedScreen”,
参数:{
代码:state.token,
}
})
}
/>
);
}
类FeedScreen扩展React.Component{
render(){
返回(
主屏幕
);
}
}
const HomeTab=createBottomTabNavigator();
函数主({route}){
console.log(“主选项卡路由”,路由参数代码)
返回(
)
}
const Stack=createStackNavigator();
函数App(){
返回(
您可以直接从ConnectScreen导航到FeedScreen
navigation.navigate('Home', { screen: 'FeedScreen ', params: {code: yourCode} });
您可以签出导航操作。基本上,您可以为特定操作创建特定方法堆栈和基于导航的方法
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
const MyStack = () => {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ title: 'Welcome' }}
/>
<Stack.Screen name="Profile" component={ProfileScreen} />
</Stack.Navigator>
</NavigationContainer>
);
};
这样试试
<HomeTab.Screen name="home" children={()=><ComponentName propName={propValue}/>} />
}/>
<HomeTab.Screen name="home" children={()=><ComponentName propName={propValue}/>} />