π§± Π‘ΡΡΡ
reaction Π² MobX β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π‘ΡΡΡΠΊΡΡΡΠ°:
reaction(
() => ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅_Π·Π½Π°ΡΠ΅Π½ΠΈΡ,
(Π½ΠΎΠ²ΡΠ΅_Π·Π½Π°ΡΠ΅Π½ΠΈΡ) => {
// Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
}
);ΠΠ»Π°Π²Π½Π°Ρ ΠΈΠ΄Π΅Ρ: ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ β ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
π¦ ΠΡΠΎΠ±Π»Π΅ΠΌΠ°
1. ΠΠ΅ Π²ΡΠ΅Π³Π΄Π° Π½ΡΠΆΠ΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΠ΅Π»Ρ
autorun ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° Π²ΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
2. ΠΠΎΠ³ΠΈΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
useEffect(() => {
if (count > cols * rows) {
setRows(...);
}
}, [count, cols, rows]);ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° UI, Π½ΠΎ ΠΈ Π·Π° Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ.
β Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ reaction Π²Π½ΡΡΡΠΈ store.
ΠΠΎΠ³ΠΈΠΊΠ° ΠΎΡΡΠ°ΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΈ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ React-ΡΠ΅Π½Π΄Π΅ΡΠ°.
π» ΠΠΎΠ΄
ΠΡΠΈΠΌΠ΅Ρ:
reaction(
() => [this.count, this.grid[0], this.grid[1]],
([count, cols, rows]) => {
if (count > cols * rows) {
this.setGrid([
cols,
Math.ceil(count / cols)
]);
}
}
);ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ reaction
reaction ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ:
1. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ
() => [
this.count,
this.grid[0],
this.grid[1]
]MobX ΡΠΌΠΎΡΡΠΈΡ, ΠΊΠ°ΠΊΠΈΠ΅ observable Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ.
ΠΠ΄Π΅ΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ:
count β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
grid[0] β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ
grid[1] β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ2. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π°ΠΊΡΠΈΠΈ
([count, cols, rows]) => {
if (count > cols * rows) {
this.setGrid(...);
}
}ΠΠ½Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ Ρ useEffect
React:
useEffect(() => {
// Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
}, [count, cols, rows]);MobX:
reaction(
() => [count, cols, rows],
() => {
// Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
}
);ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅:
useEffect β ΠΆΠΈΠ²ΡΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅
reaction β ΠΆΠΈΠ²ΡΡ Π² storeΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ:
- Π½ΡΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
- Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ MobX state
- Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ, Π° Π½Π΅ ΠΊ UI
ΠΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ:
- ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
window.addEventListener(...)ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΡ Π΅ΡΡ Π½ΡΠΆΠ΅Π½:
useEffect()π― ΠΡΠ²ΠΎΠ΄
reactionΡΠ»Π΅Π΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ- Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ
- ΠΏΠΎΡ
ΠΎΠΆ Π½Π°
useEffectΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ - ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΆΠΈΠ²ΡΡ Π² store, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅
- ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π΄Π΅ΡΠΆΠ°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ