gpt4 book ai didi

javascript - 尝试访问值时,ReactNative Context 返回未定义

转载 作者:行者123 更新时间:2023-12-05 05:48:47 25 4
gpt4 key购买 nike

我正在尝试使用我的上下文中的值/函数,但每次我 console.log 一个从上下文中 Coes 的值时,该值是未定义的。

这是我的上下文:

import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import React, {createContext, FC, useEffect } from 'react';
import { useState } from 'react';
import {fbInit, setNewUserFireStore, subscribeUserFS } from '../services/FirebaseServices';

const initialState = {
signedIn: false,
}

export const FirebaseContext = createContext();

export const FirebaseContextProvider = ({children}) => {
const [isUserSignedIn, setIsUserSignedIn] = useState(initialState.signedIn);

useEffect(() => {
fbInit();
})

const testLog = () => {
console.log("TAG Test Log Func")
}

return (
<FirebaseContext.Provider value={{isUserSignedIn, setIsUserSignedIn}}>
{children}
</FirebaseContext.Provider>
);
}

这是我尝试使用这些值的地方(我试图在按下按钮时记录这些值)

import { useNavigation } from '@react-navigation/native';
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
import {Button, Card, TextInput} from 'react-native-paper';
import { FirebaseContext } from '../../context/FirebaseContext';
import React, {useContext, useEffect, useState } from 'react';

const initialUserState = {
userName: 'Nicole Lopez',
password: '1001008888',
}

export default function LoginScreen() {
const [disabled, setDisabled] = useState(false);
const [userState, setUserState] = useState(initialUserState);
const { fbContext } = useContext(FirebaseContext);
const navigation = useNavigation();

const onInputChange = (field, value) => {
setUserState({
...userState,
[field]: value
})
}

useEffect(() => {
setDisabled(userState.userName.length === 0 || userState.password.length === 0);
}, [userState.userName, userState.password])

return (
<View style={styles.container}>
<Card style={styles.card}>

<TextInput
mode="outlined"
label="Förnamn & Efternman"
defaultValue={userState.userName}
onChangeText={text => onInputChange("username", text)}
right={<TextInput.Icon name="account" onPress={() => {
}}/>}
style={styles.textInput}/>

<TextInput
mode="outlined"
label="Anställningsnummer 100100xxxx"
defaultValue={userState.password}
right={<TextInput.Icon name="lock"/>}
onChangeText={text => onInputChange("password", text)}
style={styles.textInput}/>
</Card>

<View style={styles.buttonRow}>

<Button
color={disabled ? "gray" : undefined}
disabled={disabled}
mode={'contained'}
icon={'login'}
onPress={() => {
console.log("TAG isUserSignedIn: " + fbContext?.isuserSignedIn)
//fbContext?.testLog()
//console.log("TAG LOGIN BTN PRESSED")
//navigation.navigate('HomeScreen')
}}>Login</Button>
</View>
</View>
);
}

这是我的 App.js:

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import {StackScreens} from './src/helpers/types';
import { NavigationContainer, useNavigationContainerRef } from '@react-navigation/native';
import LoginScreen from './src/screens/LoginScreen/LoginScreen';
import HomeScreen from './src/screens/HomeScreen/HomeScreen';
import {doc, getFirestore, onSnapshot, setDoc, Unsubscribe as UnsubscribeFS} from 'firebase/firestore';
import { FirebaseContextProvider, FirebaseContext } from './src/context/FirebaseContext';
import { useContext } from 'react';
//import { navigationRef } from './RootNavigation';

//const userDocument = firestore().collection("users").doc('Cstl3bA9xwwH3UwHZJhA').get();
const Stack = createNativeStackNavigator();

export default function App() {
return (
<FirebaseContextProvider>
<Content />
</FirebaseContextProvider>
);
}

export const Content = () => {

const navigationRef = useNavigationContainerRef();
const firebaseContext = useContext({FirebaseContext});

return (
<NavigationContainer ref={navigationRef}>
<Stack.Navigator initialRouteName="LoginScreen">
<Stack.Screen name="LoginScreen" component={LoginScreen} />
<Stack.Screen name="HomeScreen" component={HomeScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}

不知道我错过了什么,我已经安装了软件包,我尝试记录不同的值,但似乎都未定义:/

最佳答案

我相信它是未定义的,因为你可能正在尝试破坏上下文值

 const { fbContext } = useContext(FirebaseContext);

应该是

 const fbContext = useContext(FirebaseContext);

关于javascript - 尝试访问值时,ReactNative Context 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70760511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com