React native 将上下文连接到组件内部的组件

React native 将上下文连接到组件内部的组件,react-native,react-native-navigation,react-context,React Native,React Native Navigation,React Context,假设您已将context AuthContext.js设置为: import React from 'react' const AuthContext = React.createContext(); export const AuthProvider = AuthContext.Provider export const AuthConsumer = AuthContext.Consumer export default AuthContext 然后在AuthContext中从父组件传

假设您已将context AuthContext.js设置为:

import React from 'react'

const AuthContext = React.createContext();

export const AuthProvider = AuthContext.Provider
export const AuthConsumer = AuthContext.Consumer

export default AuthContext
然后在AuthContext中从父组件传递到子组件,如下所示:

<AuthProvider value={authContext}>
    <NavigationContainer>
      <Stack.Navigator>
        {state.userToken == null ? (
          <Stack.Screen name="Sign In" component={SignInScreen} />
        ) : (
          <Stack.Screen name="Home" component={HomeScreen} />
        )}
      <Stack.Screen name="Registration" component={Registration} />
      </Stack.Navigator>
    </NavigationContainer>
    </AuthProvider>
class SignInScreen extends Component {
    static contextType = AuthContext
        state = {
           userName: '',
           password: ''
        }
      render(){
        const { signIn } = this.context 
      return (<Button title='Submit' onPress={() => signIn()}></Button>)
      }

{state.userToken==null(
) : (
)}
在子组件中,您可以获得如下AuthContext:

<AuthProvider value={authContext}>
    <NavigationContainer>
      <Stack.Navigator>
        {state.userToken == null ? (
          <Stack.Screen name="Sign In" component={SignInScreen} />
        ) : (
          <Stack.Screen name="Home" component={HomeScreen} />
        )}
      <Stack.Screen name="Registration" component={Registration} />
      </Stack.Navigator>
    </NavigationContainer>
    </AuthProvider>
class SignInScreen extends Component {
    static contextType = AuthContext
        state = {
           userName: '',
           password: ''
        }
      render(){
        const { signIn } = this.context 
      return (<Button title='Submit' onPress={() => signIn()}></Button>)
      }
类标志屏幕扩展组件{
静态contextType=AuthContext
状态={
用户名:“”,
密码:“”
}
render(){
const{signIn}=this.context
返回(signIn()}>)
}
假设父组件中的减速器设置正确,如果SignInScreen调用另一个组件注册,则:

class SignInScreen extends Component {
        static contextType = AuthContext
            state = {
               userName: '',
               password: ''
            }
          render(){
            const { signIn } = this.context 
           if (flag){
                return (<Button title='Submit' onPress={() => signIn()}></Button>)
           }
           else {
           return (<Button title='Submit' onPress={() => this.props.navigation.navigate('Registration')}></Button>)
           }
          }
类标志屏幕扩展组件{
静态contextType=AuthContext
状态={
用户名:“”,
密码:“”
}
render(){
const{signIn}=this.context
国际单项体育联合会(旗){
返回(signIn()}>)
}
否则{
返回(this.props.navigation.navigate('Registration')}>)
}
}
如何从注册中调用AuthContext。我尝试了与SignInScreen中使用的方法相同的方法,但不起作用