PL
React - proste logowanie / wylogowanie
3 points
W tym artykule chcielibyśmy pokazać, jak stworzyć prostą usługę logowania/wylogowania w React.
W poniższym przykładzie tworzymy obiekt AuthenticationContext
, który pozwala nam dzielić kontekst między komponentami potomnymi. Kontekst pozwala nam dzielić się pewnymi informacjami między komponentami bez konieczności używania właściwośći - wszystkie komponenty potomne mają dostęp do kontekstu rodzica.
Używając AuthenticationContext.Provider
możemy udostępnić wszystkim dzieciom obiekt authenticationService
. Aby mieć dostęp do authenticationService
w każdym z komponentów potomnych, należy wywołać useContext(AuthenticationContext)
.
- Komponent funkcyjny
UserMenu
to pierwszy komponent, który używa naszegoAuthenticationContext
zainicjowanego wApp
. Za pomocą przycisków i przypisanym im metodonClick
możemy zalogować lub wylogować naszego użytkownika poprzez aktualizacjęAuthenticationContext
. - Komponent
SiteNavbar
jest drugim komponentem, który używaAuthenticationContext
.
Wyświetla on naszego użytkownika używając metodygetUser()
z naszegoauthenticationService
i renderuje komponentUserMenu
. - Dane użytkownika są przechowywane w stanie komponentu
App
, dzięki temu w przypadku zmiany danych wystąpi ponowne renderowanie wszystkich komponentów.
xxxxxxxxxx
1
//import React from 'react';
2
//import ReactDOM from 'react-dom';
3
4
const AuthenticationContext = React.createContext();
5
6
const UserMenu = () => {
7
const authenticationService = React.useContext(AuthenticationContext);
8
const handleLoginClick = () => authenticationService.loginUser('Jacek');
9
const handleLogoutClick = () => authenticationService.logoutUser();
10
return (
11
<>
12
<button onClick={handleLoginClick}>Zaloguj: Jacek</button>
13
<button onClick={handleLogoutClick}>Wyloguj: Jacek</button>
14
</>
15
);
16
};
17
18
const SiteNavbar = () => {
19
const authenticationService = React.useContext(AuthenticationContext);
20
return (
21
<div>
22
<span>{authenticationService.getUser()}</span>
23
<UserMenu />
24
</div>
25
);
26
};
27
28
const App = () => {
29
const [user, setUser] = React.useState(null);
30
const authenticationService = {
31
getUser: () => user,
32
loginUser: (user) => {
33
//TODO: Zastąp setUser zapytaniami AJAX do serwera
34
setUser(user);
35
return true;
36
},
37
logoutUser: () => {
38
//TODO: Zastąp setUser zapytaniami AJAX do serwera
39
setUser(null);
40
return true;
41
}
42
// inne metody...
43
};
44
return (
45
<AuthenticationContext.Provider value={authenticationService}>
46
<SiteNavbar />
47
</AuthenticationContext.Provider>
48
);
49
};
50
51
const root = document.querySelector('#root');
52
ReactDOM.render(<App />, root);