React native 将上下文连接到组件内部的组件
假设您已将context AuthContext.js设置为: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中从父组件传
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中使用的方法相同的方法,但不起作用