React Native useContex
import React from 'react';
export function useAuth() {
const [name, setName] = React.useState('Sa');
return {name, setName};
}
import {createContext} from 'react';
export const UserContext = createContext();
import React from 'react';
import {useAuth} from './userHook';
import {UserContext} from './userContext';
import Pagesd from './pagesd';
export default function () {
const {name} = useAuth();
return (
<UserContext.Provider value={name}>
<Pagesd />
</UserContext.Provider>
);
}
import React from 'react';
import {View, Text} from 'react-native';
import {UserContext} from './userContext';
function Pagesd() {
const {name} = React.useContext(UserContext);
return (
<View>
<Text>{name}</Text>
</View>
);
}
export default Pagesd;
Spodziewałem się, że funkcja useAuth zobaczy wpisaną Sa Pagesd () w miejscu, w którym robię źle
Chcę zająć się zarządzaniem sprawami, ale nazwa pojawia się w aplikacji js, ale nie mam dostępu do dzieci.
Odpowiedzi
Kod pokazany do tej pory jest poprawny, z jednym wyjątkiem.
const {name} = React.useContext(UserContext);
Wartość namejest niszczona po powrocie z useContext. To jest w porządku, jeśli podana wartość jest przedmiotem, ale zakładam, że tak nie jest.
<UserContext.Provider value={name}>
Jeśli namenie jest obiektem, ale ciągiem znaków, to destrukcja nie zadziała i namebędzie undefined.
Aby rozwiązać ten problem, masz dwie możliwości:
- Nie niszcz
namewartości
const name = React.useContent(UserContext);
- Przekaż dostawcy obiekt
<UserContext.Provider value={{name}}>
React używa nawiasów klamrowych {} do oznaczenia wyrażenia JavaScript , podczas gdy wewnętrzne nawiasy klamrowe są skrótem wartości właściwości literału obiektu .