Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Content provider (ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€)

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€

ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ содСрТимого примСняСтся лишь Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ совмСстно с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прилоТСниями, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² устройствС. Но Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ сСйчас Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ всё-Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого способа Π½Π° всякий случай.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ½ΠΈΠ³Ρƒ β„–23), Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ URI (ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ряд Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹):

Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ Π² устройствС, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ URI для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ осущСствлСния с Π½ΠΈΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, поставщики содСрТимого ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΏΡ€ΠΈ совмСстном использовании Π΄Π°Π½Π½Ρ‹Ρ… нСсколькими прилоТСниями.

ВстроСнныС поставщики

Π’ Android ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ встроСнныС поставщики содСрТимого (ΠΏΠ°ΠΊΠ΅Ρ‚ android.provider). Π’ΠΎΡ‚ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ список поставщиков содСрТимого:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнного ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°

Для создания собствСнного ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ абстрактного класса ContentProvider:

Π’ классС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ query(), insert(), update(), delete(), getType(), onCreate(). ΠŸΡ€ΠΎΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сходство с созданиСм ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

А Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ слСдуСт Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² манифСстС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π° provider с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ name ΠΈ authorities. Π’Π΅Π³ authorities слуТит для описания Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ URI, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ContentResolver ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для взаимодСйствия. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚Π΅Π³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, поэтому рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прилоТСниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ поставщика содСрТимого Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ сайта. Если источник ΡƒΠΆΠ΅ зарСгистрирован, эти поставщики содСрТимого Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны гипСрссылками, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСфикса источника:

Π˜Ρ‚Π°ΠΊ, поставщики содСрТимого, ΠΊΠ°ΠΊ ΠΈ Π²Π΅Π±-сайты, ΠΈΠΌΠ΅ΡŽΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΊΠ°ΠΊ стартовая URL-страница.

Π’ поставщиках содСрТимого Ρ‚Π°ΠΊΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ REST-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ гипСрссылки, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для поиска Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Π’ случаС описанной Π²Ρ‹ΡˆΠ΅ рСгистрации ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ рСсурса, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для обозначСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ записСй Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… NotePadProvider, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ имя:

URI для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятой записи Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

Π‘ΠΈΠΌΠ²ΠΎΠ» # соотвСтствуСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ записи (ряд Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² URI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² поставщиках содСрТимого:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² содСрТимого (Content URI)

Для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· поставщика содСрТимого Π½ΡƒΠΆΠ½ΠΎ просто Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ URI. Однако ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с поставщиком содСрТимого Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Π΅ прСдставлСны ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ строк ΠΈ столбцов ΠΈ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Android cursor. Рассмотрим структуру URI, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для получСния Π΄Π°Π½Π½Ρ‹Ρ….

Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ содСрТимого (Content URI) Π² Android Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ HTTP URI, Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с content ΠΈ строятся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ:

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ URI, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… идСнтифицируСтся запись, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π½ΠΎΠΌΠ΅Ρ€ 23:

ПослС content: Π² URI содСрТится ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ источника, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для нахоТдСния поставщика содСрТимого Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ рССстрС. Π§Π°ΡΡ‚ΡŒ URI ru.alexanderklimov.provider.notepad прСдставляСт собой источник.

UriMatcher

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса UriMatcher, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ снаруТи ΠΈ Π½Π° основС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ создаёт Π½ΡƒΠΆΠ½Ρ‹ΠΉ запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

URI patternCodeContant name
content://ru.alexanderklimov.provider.notepad/notes100NOTES
content://ru.alexanderklimov.provider.notepad/notes/#101NOTES_ID

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТным ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ‚Π°Π±Π»ΠΈΡ†. Π’ΠΎΠ³Π΄Π° ΠΈ констант Π±ΡƒΠ΄Π΅Ρ‚ большС. НапримСр, Ρ‚Π°ΠΊ.

URI patternCodeContant name
content://com.android.contacts/contacts1000CONTACTS
content://com.android.contacts/contacts/#1001CONTACTS_ID
content://com.android.contacts/lookup/*1002CONTACTS_LOOKUP
content://com.android.contacts/lookup/*/#1003CONTACTS_LOOKUP_ID
...
content://com.android.contacts/data3000DATA
content://com.android.contacts/data/#3001DATA_ID
...

Π‘ΠΈΠΌΠ²ΠΎΠ» Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠΈ (#) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° число, Π° символ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ (*) Π·Π° строку.

ΠœΠ΅Ρ‚ΠΎΠ΄ query()

ΠœΠ΅Ρ‚ΠΎΠ΄ query() являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ для класса ContentProvider. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ для обращСния ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ SQLiteDatabase. Бостав ΠΌΠ΅Ρ‚ΠΎΠ΄Π° практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½.

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ ContentUris.parseId(uri), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСдний сСгмСнт адрСса, Π² нашСм случаС число 3, для Selection Args.

ΠœΠ΅Ρ‚ΠΎΠ΄ insert()

Для вставки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ insertGuest().

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ МIΠœΠ•-Ρ‚ΠΈΠΏΠΎΠ² Π² Android

Как Π²Π΅Π±-сайт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ MIME для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ гипСрссылки (это позволяСт Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для просмотра Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°), Ρ‚Π°ΠΊ ΠΈ Π² поставщикС содСрТимого прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ возвращСния Ρ‚ΠΈΠΏΠ° MIME для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ URI. Благодаря этому достигаСтся опрСдСлСнная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ просмотрС Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для прСдставлСния Ρ‚Π°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ссли Π½Π° ТСстком дискС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π΅ΡΡ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ», ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ нСсколько Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ способны Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ.

Π’ΠΈΠΏΡ‹ MIME Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Android ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² НВВР. Π’Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Ρ‚ΠΈΠΏ MIME ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌ URI, ΠΈ поставщик содСрТимого Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²ΡƒΡ…Ρ‡Π°ΡΡ‚Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ MIME Π² соотвСтствии с принятыми стандартами.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ MIME состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй: Ρ‚ΠΈΠΏΠ° ΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… извСстных ΠΏΠ°Ρ€ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² MIME:

text/html
text/css
text/xml
image/jpeg
audio/mp3
video/mp4
application/pdf
application/msword

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ зарСгистрированныС Ρ‚ΠΈΠΏΡ‹ содСрТимого:

application
audio
image
message
model
multipart
text
video

Π’ Android примСняСтся схоТий ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ для опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² MIME. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ vnd Π² Ρ‚ΠΈΠΏΠ°Ρ… MIME Π² Android ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСстандартными, зависящими ΠΎΡ‚ производитСля. Для обСспСчСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Android Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΈΠΏΡ‹ MIME Π² Android, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ содСрТимого, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…: для ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ записи ΠΈ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… записСй.

ContentResolver

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Content, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя экзСмпляр класса ContentResolver, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ getContentResolver().

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Provider для Flutter

Π’ Π½Π°ΡˆΠΈΡ… срСднСсрочных ΠΏΠ»Π°Π½Π°Ρ… β€” Π²Ρ‹Ρ…ΠΎΠ΄ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Flutter. ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ языка Dart ΠΊΠ°ΠΊ Ρ‚Π΅ΠΌΡ‹ ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, поэтому ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π Π΅Ρ‡ΡŒ Π² Π½Π΅ΠΉ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Provider ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ состояниСм Π² Flutter.

Provider – это ΠΏΠ°ΠΊΠ΅Ρ‚ для управлСния состояниями, написанный Π Π΅ΠΌΠΈ РуслС ΠΈ взятый Π½Π° Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² Google ΠΈ Π² сообщСствС Flutter. Но Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм? Для Π½Π°Ρ‡Π°Π»Π°, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ состояниС? Напомню, Ρ‡Ρ‚ΠΎ состояниС – это просто Π΄Π°Π½Π½Ρ‹Π΅ для прСдставлСния UI Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм – это ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ созданию этих Π΄Π°Π½Π½Ρ‹Ρ…, доступа ΠΊ Π½ΠΈΠΌ, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ с Π½ΠΈΠΌΠΈ ΠΈ избавлСния ΠΎΡ‚ Π½ΠΈΡ…. Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Provider, ΠΊΡ€Π°Ρ‚ΠΊΠΎ обрисуСм ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ управлСния состояниСм Π² Flutter.

1. StatefulWidget

2. InheritedWidget

3. ScopedModel

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ состояния, ΠΌΡ‹ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ScopedModel Π² ΠΊΠΎΡ€Π½Π΅ нашСго прилоТСния:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ смогут ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ MyModel ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ScopedModelDescendant. ЭкзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ пСрСдаСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ builder :

Π›ΡŽΠ±ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ Ρ‚Π°ΠΊΠΆΠ΅ смоТСт ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ модСль, Ρ‡Ρ‚ΠΎ автоматичСски спровоцируСт пСрСстройку Π»ΡŽΠ±Ρ‹Ρ… ScopedModelDescendants (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ наша модСль ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ notifyListeners() ):

ScopedModel ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π» ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π²ΠΎ Flutter Π² качСствС инструмСнта для управлСния состояниСм, Π½ΠΎ Π΅Π³ΠΎ использованиС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ прСдоставлСниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… класс Model ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ увСдомлСния ΠΎΠ± измСнСниях.

4. BLoC

На ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Google I/O ’18 Π±Ρ‹Π» прСдставлСн ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Business Logic Component (BLoC), слуТащий Π² качСствС Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ инструмСнта, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ вынСсти состояниС ΠΈΠ· Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠšΠ»Π°ΡΡΡ‹ BLoC – это Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π½Π΅ относящиСся ΠΊ UI, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠ΅ состояниС ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ². Вынося состояниС ΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ UI, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ простой StatelessWidget ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ StreamBuilder для автоматичСской пСрСстройки. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Β«Π³Π»ΡƒΠΏΠ΅Π΅Ρ‚Β», ΠΈ Π΅Π³ΠΎ становится ΠΏΡ€ΠΎΡ‰Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ класса BLoC:

5. Provider

Provider построСн β€œΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ, для Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ².” Provider позволяСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ состояниСм, Π² Π΄Π΅Ρ€Π΅Π²ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ для любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° (ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°). Π’Π°ΠΊΠΆΠ΅ Provider ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² состояний, инициализируя ΠΈΡ… с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ выполняя очистку послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Provider ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π°ΠΆΠ΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² BLoC ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ основой для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ состояниСм! Π›ΠΈΠ±ΠΎ просто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для внСдрСния зависимостСй β€” ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΡΠ»Π°Π±ΠΈΡ‚ΡŒ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. НаконСц, Provider поставляСтся с Π½Π°Π±ΠΎΡ€ΠΎΠΌ спСциализированных классов, благодаря ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΅Ρ‰Π΅ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих классов.

Установка

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ Provider Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π½ΡƒΠΆΠ½ΠΎ:

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Provide r Π² ΠΊΠΎΡ€Π½Π΅ нашСго прилоТСния; здСсь Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ экзСмпляр нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ? Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, Π³Π΄Π΅ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ свойство foo :

Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€Π΅Π»Π΅ΡΡ‚ΡŒ, прСдоставляСмая Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Provider просто Ρ‚Π°ΠΊ.

Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Provider :

Аналогично Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, FutureProvider – это Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° стандартному FutureBuilder ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ValueListenable – это интСрфСйс Dart, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ классом ValueNotifier, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ увСдомляСт ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ мСняСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ цСлочислСнный счСтчик Π² простом классС ΠΌΠΎΠ΄Π΅Π»ΠΈ:

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ свойство counter ΠΈΠ· любого Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°:

MultiProvider позволяСт ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… всС Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. Π­Ρ‚ΠΎ просто синтаксичСский сахар: Π½Π° внутрисистСмном ΡƒΡ€ΠΎΠ²Π½Π΅ всС ΠΎΠ½ΠΈ всС Ρ€Π°Π²Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ.

Как ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ADO (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ODBC

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ODBC, являясь ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС зависящиС ΠΎΡ‚ ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ADO. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π³Π½Π΅Π·Π΄ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Однако Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π‘Π£Π‘Π” ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Microsoft Access ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³Π½Π΅Π·Π΄ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ пяти ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

Для этого ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Provider свойства ConnectionString слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ MSDASQL. Випичная строка соСдинСния ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

АргумСнт DSN (Data Source Name), Π·Π°Π΄Π°Π΅Ρ‚ имя источника Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ имя Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ зарСгистрировано Π² АдминистраторС источников Π΄Π°Π½Π½Ρ‹Ρ… ODBC, Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΠΏΠ°Π½Π΅Π»ΠΈ управлСния. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΎΠΊΠ½ΠΎ Администратора, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я установил DSN для тСстовой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этой Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…:

Π₯ΠΎΡ‡Ρƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Microsoft Jet

Π­Ρ‚ΠΎΡ‚ ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Microsoft Jet Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π°, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, созданным Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Access. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… использовался ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€. Випичная строка соСдинСния ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Internet Publishing

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования этого ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹.

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ SQL Server

ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Oracle

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹

ΠšΡ€Π°Ρ‚ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ доступ со статусом «Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния» ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΈ Web-страницам, индСксируСмых слуТбой Microsoft Indexing Service.Microsoft Active Directory Service Interfaces (ADSI) Provider«Provider=ADSDSOObject;User >

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠΎΡ‡Π΅ΠΌΡƒ контСкст Π½Π΅ являСтся «инструмСнтом для управлСния состояниСм»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ provider Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Context ΠΈ Redux β€” это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅?

НСт. Π­Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ инструмСнты, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Ρ€Π°Π·Π½Ρ‹Ρ… цСлях.

ЯвляСтся Π»ΠΈ контСкст инструмСнтом «управлСния состояниСм»?

НСт. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ β€” это Ρ„ΠΎΡ€ΠΌΠ° внСдрСния зависимостСй (dependency injection). Π­Ρ‚ΠΎ транспортный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ управляСт. Π›ΡŽΠ±ΠΎΠ΅ Β«ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм» осущСствляСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ² useState()/useReducer().

Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Context ΠΈ useReducer() Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Redux?

НСт. Они Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈ ΠΈ частично ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, Π½ΠΎ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ»Π°Π½Π΅ возмоТностСй.

Когда слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ контСкст?

Когда Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ доступными для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠΏΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Когда слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Context ΠΈ useReducer()?

Когда Π²Π°ΠΌ трСбуСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм ΡƒΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ слоТного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ части прилоТСния.

Когда слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Redux?

Redux Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

ПониманиС Context и Redux

Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования инструмСнта критичСски Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ:

НСразбСриха Π²ΠΎΠΊΡ€ΡƒΠ³ Context ΠΈ Redux связана, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, с Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, для Ρ‡Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ инструмСнты ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ°ΡŽΡ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ контСкст?

НачнСм с опрСдСлСния контСкста ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

Β«ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡ‹ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… уровнях.

Π’ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ свСрху Π²Π½ΠΈΠ· (ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΊ ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒ) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠΏΠΎΠ². Однако, этот способ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ чСрСсчур Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ язык, Ρ‚Π΅ΠΌΠ° интСрфСйса), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ прСдоставляСт способ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π±Π΅Π· нСобходимости явно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡ‹ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²Β».

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΈ слова Π½Π΅ говорится ΠΎΠ± Β«ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈΒ», Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Β«ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅Β» ΠΈ «распрСдСлСнии».

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ API контСкста (React.createContext()) Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±Ρ‹Π»ΠΎ прСдставлСно Π² React 16.3 Π² качСствС Π·Π°ΠΌΠ΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ API, доступного Π² Ρ€Π°Π½Π½ΠΈΡ… вСрсиях React, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ нСсколько нСдостатков Π΄ΠΈΠ·Π°ΠΉΠ½Π°. Одной ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ являлось Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ обновлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· контСкст, ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Β«Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Β», Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ пропускал Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ‡Π΅Ρ€Π΅Π· shouldComponentUpdate(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Π»ΠΈ ΠΊ shouldComponentUpdate() Π² цСлях ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· контСкст ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ бСсполСзной. createContext() Π±Ρ‹Π» спроСктирован для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, поэтому любоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ значСния отразится Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, Π΄Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ пропускаСт Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³.

ИспользованиС контСкста

ИспользованиС контСкста Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ контСкста являСтся состояниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

ПослС этого Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊ useContext() ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ контСкста:

ЦСль ΠΈ случаи использования контСкста

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ, это являСтся Ρ„ΠΎΡ€ΠΌΠΎΠΉ внСдрСния зависимостСй. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ нуТдаСтся Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΎΠ½ Π½Π΅ пытаСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ВмСсто этого, ΠΎΠ½ полагаСтся Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ пСрСдаст эти Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ врСмя выполнСния (runtime).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Redux?

Π’ΠΎΡ‚ ΠΎ Ρ‡Π΅ΠΌ гласит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· «Основ ReduxΒ»:

Β«Redux β€” это ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для управлСния ΠΈ обновлСния состояния прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ события, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΡ‹Π΅ опСрациями (дСйствиями, actions). Redux выступаСт Π² Ρ€ΠΎΠ»ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° состояния прилоТСния, ΡΠ»Π΅Π΄ΡŽΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ прСдсказуСмоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ состояниС.

Redux позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ β€žΠ³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌβ€œ состояниСм β€” состояниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трубСтся нСскольким частям прилоТСния.

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ инструмСнты, прСдоставляСмыС Redux, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³Ρ‡Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π³Π΄Π΅, ΠΊΠΎΠ³Π΄Π°, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ состояниС, ΠΈ ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅Β».

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ описаниС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°:

АрхитСктурно, Redux ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ΅ прСдсказуСмых Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€ΠΎΠ²Β» (reducers), ΠΈ ΠΎΠ±ΠΎΡΠΎΠ±Π»ΡΡ‚ΡŒ идСю Β«ΠΊΠ°ΠΊΠΎΠ΅ событиС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎΒ» ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ Β«ΠΊΠ°ΠΊ обновляСтся состояниС ΠΏΡ€ΠΈ Π²ΠΎΠ·Π³Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ события». Π’ Redux Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС (middleware) ΠΊΠ°ΠΊ способ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ возмоТностСй Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов (side effects).

Redux Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт инструмСнты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Redux ΠΈ React

Π‘Π°ΠΌ ΠΏΠΎ сСбС Redux Π½Π΅ зависит ΠΎΡ‚ UI β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с Π»ΡŽΠ±Ρ‹ΠΌ слоСм прСдставлСния (view layer) (React, Vue, Angular, Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ JS ΠΈ Ρ‚.Π΄.) Π»ΠΈΠ±ΠΎ Π±Π΅Π· UI Π²ΠΎΠΎΠ±Ρ‰Π΅.

Однако, Ρ‡Π°Ρ‰Π΅ всСго, Redux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с React. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° React Redux β€” это ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ слой UI, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Redux, получая значСния ΠΈΠ· состояния Redux ΠΈ инициализируя Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. React-Redux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ контСкст Π² своих Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ…. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ React-Redux ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· контСкст экзСмпляр Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Redux, Π° Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ состояния! Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования контСкста для внСдрСния зависимостСй. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ наши ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ Redux ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π²ΠΎ взаимодСйствии с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Redux, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΈΠ»ΠΈ Π½Π°ΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ это Π·Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ опрСдСляСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. НастоящСС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Redux внСдряСтся Π² Π΄Π΅Ρ€Π΅Π²ΠΎ Π²ΠΎ врСмя выполнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

ЦСль ΠΈ случаи использования (React-)Redux

ОсновноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Redux согласно ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

Β«ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ инструмСнты, прСдоставляСмыС Redux, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π°, Π³Π΄Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π° это ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β».

БущСствуСт Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½ использования Redux. Одной ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ являСтся ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ «бурСния».

Π”Ρ€ΡƒΠ³ΠΈΠ΅ случаи использования:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ контСкст Π½Π΅ являСтся инструмСнтом «управлСния состояниСм»?

БостояниС β€” это Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ прилоТСния. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ состояниС Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, ΠΊΠ°ΠΊ состояниС сСрвСра, состояниС ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΈ локальноС состояниС, Ссли Ρ…ΠΎΡ‚ΠΈΠΌ, Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ аспСктом являСтся Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ использованиС Π΄Π°Π½Π½Ρ‹Ρ….

Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм β€” это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ».

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Β«ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

React-Ρ…ΡƒΠΊΠΈ useState() ΠΈ useReducer() ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ управлСния состояниСм. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Ρ…ΡƒΠΊΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ:

React Context Π½Π΅ соотвСтствуСт Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΌ критСриям. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ Π½Π΅ являСтся инструмСнтом управлСния состояниСм

Β«ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ β€” это Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ состояниС распрСдСляСтся ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ с состояниСм».

«Полагаю, контСкст β€” это ΠΊΠ°ΠΊ скрытыС ΠΏΡ€ΠΎΠΏΡ‹, Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ состояниС».

ВсС, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ контСкст, это позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ «бурСния».

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Context ΠΈ Redux

Π‘Ρ€Π°Π²Π½ΠΈΠΌ возмоТности контСкста ΠΈ React+Redux:

Context ΠΈ useReducer()

Одной ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² дискуссии Β«Context ΠΏΡ€ΠΎΡ‚ΠΈΠ² ReduxΒ» являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ люди, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, Π½Π° самом Π΄Π΅Π»Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π²ΠΈΠ΄Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Β«Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ useReducer() для управлСния состояниСм ΠΈ контСкст для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ значСния». Но, вмСсто этого, ΠΎΠ½ΠΈ просто говорят: Β«Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ контСкст». Π’ этом, Π½Π° ΠΌΠΎΠΉ взгляд, кроСтся основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π΅Ρ€Π°Π·Π±Π΅Ρ€ΠΈΡ…ΠΈ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ ΠΌΠΈΡ„Π° ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ контСкст «управляСт состояниСм».

Рассмотрим ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Context + useReducer(). Π”Π°, такая комбинация выглядит ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Redux + React-Redux. ОбС эти ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚:

«МоС Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ контСкст Π³ΠΎΡ‚ΠΎΠ² ΠΊ использованию для маловСроятных ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ с Π½ΠΈΠ·ΠΊΠΎΠΉ частотой (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ локализация ΠΈΠ»ΠΈ Ρ‚Π΅ΠΌΠ°). Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎ всСх Ρ‚Π΅Ρ… случаях, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использовался старый контСкст, Ρ‚.Π΅. для статичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ распространСниСм обновлСния ΠΏΠΎ подпискам. Он Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² ΠΊ использованию Π² качСствС Π·Π°ΠΌΠ΅Π½Ρ‹ Flux-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… β€žΡ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‚Π΅Π»Π΅ΠΉβ€œ состояния».

Π’ сСти сущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ статСй, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‰ΠΈΡ… настройку Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… контСкстов для Ρ€Π°Π·Π½Ρ‹Ρ… частСй состояния, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠ² ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с областями видимости. НСкоторыС ΠΈΠ· постов Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ собствСнныС Β«ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ контСкста», Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования сочСтания React.memo(), useMemo() ΠΈ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ раздСлСния ΠΊΠΎΠ΄Π° Π½Π° Π΄Π²Π° контСкста для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части прилоТСния (ΠΎΠ΄Π½Π° для Π΄Π°Π½Π½Ρ‹Ρ…, другая для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ обновлСния). БСзусловно, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ, Π½ΠΎ Π² этом случаС Π²Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚Π΅ React-Redux.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Context + useReducer() β€” это лСгкая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Redux + React-Redux Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ приблиТСнии… эти ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, контСкст + useReducer() Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Redux!

Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ инструмСнта

Для Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ инструмСнта ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ инструмСнт, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ стоят ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ.

ΠžΠ±Π·ΠΎΡ€ случаСв использования

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

Как ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Для этого Π²Π°ΠΌ всСго лишь Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ инструмСнт Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ вашСго прилоТСния.

Часто ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ «использованиС Redux ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ написаниС большого количСства шаблонного ΠΊΠΎΠ΄Π°Β», ΠΎΠ΄Π½Π°ΠΊΠΎ, «соврСмСнный ReduxΒ» Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ инструмСнта ΠΈ Π΅Π³ΠΎ использованиС. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Redux Toolkit Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Ρ…ΡƒΠΊΠΈ React-Redux ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ использованиС Redux Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… React.

РазумССтся, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ RTK ΠΈ React-Redux Π² качСствС зависимостСй ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Β«Π±Π°Π½Π΄Π»Β» прилоТСния ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с контСкстом + useReducer(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ встроСнными. Но прСимущСства Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ нСдостатки β€” Π»ΡƒΡ‡ΡˆΠ°Ρ трассировка состояния, простая ΠΈ Π±ΠΎΠ»Π΅Π΅ прСдсказуСмая Π»ΠΎΠ³ΠΈΠΊΠ°, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ оптимизация Ρ€Π΅Π½Π΄Ρ€ΠΈΠ½Π³Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Redux, Context ΠΈ useReducer() вмСстС. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ «глобальноС» состояниС Π² Redux, Π° локальноС β€” Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, какая Ρ‡Π°ΡΡ‚ΡŒ прилоТСния Π΄ΠΎΠ»ΠΆΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Redux, Π° какая β€” Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Redux для хранСния глобального состояния, Context + useReducer() β€” для хранСния локального состояния, ΠΈ Context β€” для статичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π•Ρ‰Π΅ Ρ€Π°Π·: я Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ всС состояниС прилоТСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Redux ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Redux β€” это всСгда Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π― ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ лишь, Ρ‡Ρ‚ΠΎ Redux β€” Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€, сущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Redux, ΠΈ ΠΏΠ»Π°Ρ‚Π° Π·Π° Π΅Π³ΠΎ использованиС Π½Π΅ Ρ‚Π°ΠΊ высока, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡƒΠΌΠ°ΡŽΡ‚.

НаконСц, контСкст ΠΈ Redux Π½Π΅ СдинствСнныС Π² своСм Ρ€ΠΎΠ΄Π΅. БущСствуСт мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ½Ρ‹Π΅ аспСкты управлСния состояниСм. MobX β€” популярноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ ООП ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (observables) для автоматичСского обновлСния зависимостСй. Π‘Ρ€Π΅Π΄ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ обновлСнию состояния ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Jotai, Recoil ΠΈ Zustand. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²Ρ€ΠΎΠ΄Π΅ React Query, SWR, Apollo ΠΈ Urql, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ абстракции, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ распространСнных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с состояниСм, ΠΊΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ сСрвСром (скоро похоТая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (RTK Query) появится ΠΈ для Redux Toolkit).

НадСюсь, данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ контСкстом ΠΈ Redux, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΠΎΠΉ инструмСнт ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… случаях слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *