React
Open in Telegram
ΠΠΎΠ΄Π±ΠΎΡΠΊΠΈ ΠΏΠΎ React js ΠΈ Π²ΡΠ΅ ΡΡΠΎ Ρ Π½ΠΈΠΌ ΡΠ²ΡΠ·Π°Π½ΠΎ. ΠΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ @evgenycarter
Show more2 674
Subscribers
-224 hours
-57 days
-1230 days
Posts Archive
2 674
ΠΠΎΠ³ΡΡΠΆΠ°Π΅ΠΌΡΡ Π² React Suspense API
https://blog.bitsrc.io/understanding-the-suspense-api-in-react-18-bbea3f6f6df1
βοΈ @React_lib
2 674
ΠΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ React, Nest ΠΈ NX. Π§Π°ΡΡΡ 1: Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π ΡΠ΅ΡΠΈΠΈ ΡΡΠ°ΡΠ΅ΠΉ ΠΌΡ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ. Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈ Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ c ΠΏΠΎΠΌΠΎΡΡΡ NX, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ React, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ backend Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ NestJS, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
MongoDB.
βοΈ @React_lib
2 674
UI-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ React: ΡΠΎΠΏ-10 Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ²
https://dev.to/nilanth/10-react-packages-with-1k-ui-components-2bf3
βοΈ @React_lib
2 674
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ useDeferredValue
ΠΡΠ½ ΠΠ±ΡΠ°ΠΌΠΎΠ² ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ
ΡΠΊΠ° useDeferredValue ΠΈΠ· React 18:
function Form() {
const [state, setState] = useState({ value: "hello" })
const deferredState = useDeferredValue(state)
// ...
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ deferredState Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
, ΡΠ΅Π½Π΄Π΅Ρ ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅ ΡΡΠΎΡΠ½ΡΠΉ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ debounce. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ state Π½Π°ΠΏΡΡΠΌΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, input.
βοΈ @React_lib2 674
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΡΠΌΠ°ΠΌΠΈ Π² React
- Formik. ΠΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΡΠΌΠ°ΠΌΠΈ. Π£ΠΌΠ΅Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΡΠΌΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ TypeScript, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· Yup ΠΈΠ»ΠΈ Joi. Π Formik Π²Ρ
ΠΎΠ΄ΠΈΡ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ: Form, Field, ErrorMessage, Π½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠΎΡΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Ρ
ΡΠΊ useFormik.
- React Hook Form. ΠΠΈΠ±ΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌ ΡΠ΅ΡΠ΅Ρ
Ρ
ΡΠΊΠΈ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ TypeScript ΠΈ React Native. Π£ΠΌΠ΅Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΎΡΠΌΡ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΈΠ½ΠΏΡΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π· ref Π°ΡΡΠΈΠ±ΡΡ. ΠΡΠ»ΠΈ ΠΈΠ½ΠΏΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· Material UI, ΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±Π΅ΡΡΠΊΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Controller.
- React Final Form. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½ Observer Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅-ΡΠ΅Π½Π΄Π΅ΡΠ°. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΎΡΠΌΡ, Π² ΡΠΎΡΡΠ°Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²Ρ
ΠΎΠ΄ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Form, Field, ΡΠ°ΠΊ ΠΈ Ρ
ΡΠΊΠΈ. ΠΠ΅ΠΉΠ½ΡΠ΅Π½Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Erik Rasmussen, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» Π°Π²ΡΠΎΡΠΎΠΌ Redux Form, ΡΡΠΈΡΠ°Π΅Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΡΠΈΡΠ΅ΠΉ React Final Form Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
βοΈ @React_lib
2 674
React Hooks: useState
Π₯ΡΠΊ useState() ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ°ΡΡ Π³Π΅ΡΡΠ΅Ρ/ΡΠ΅ΡΡΠ΅Ρ - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ: const [value, setValue] = useState(defaultValue).
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
const UpdateState = () => {
const [age, setAge] = useState(19)
const handleClick = () => setAge(age + 1)
return (
<>
<p>ΠΠ½Π΅ {age} Π»Π΅Ρ.</p>
<button onClick={handleClick}>Π‘ΡΠ°ΡΡ ΡΡΠ°ΡΡΠ΅!</button>
</>
)
}
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ
const MultipleStates = () => {
const [age, setAge] = useState(19)
const [num, setNum] = useState(1)
const handleAge = () => setAge(age + 1)
const handleNum = () => setNum(num + 1)
return (
<>
<p>ΠΠ½Π΅ {age} Π»Π΅Ρ.</p>
<p>Π£ ΠΌΠ΅Π½Ρ {num} Π±ΡΠ°ΡΡΠ΅Π² ΠΈ ΡΠ΅ΡΡΠ΅Ρ.</p>
<button onClick={handleAge}>Π‘ΡΠ°ΡΡ ΡΡΠ°ΡΡΠ΅!</button>
<button onClick={handleNum}>ΠΠΎΠ»ΡΡΠ΅ Π±ΡΠ°ΡΡΠ΅Π² ΠΈ ΡΠ΅ΡΡΠ΅Ρ!</button>
</>
)
}
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
const StateObject = () => {
const [state, setState] = useState({ age: 19, num: 1 })
const handleClick = (val) =>
setState({
...state,
[val]: state[val] + 1
})
const { age, num } = state
return (
<>
<p>ΠΠ½Π΅ {age} Π»Π΅Ρ.</p>
<p>Π£ ΠΌΠ΅Π½Ρ {num} Π±ΡΠ°ΡΡΠ΅Π² ΠΈ ΡΠ΅ΡΡΠ΅Ρ.</p>
<button onClick={() => handleClick('age')}>Π‘ΡΠ°ΡΡ ΡΡΠ°ΡΡΠ΅!</button>
<button onClick={() => handleClick('num')}>
ΠΠΎΠ»ΡΡΠ΅ Π±ΡΠ°ΡΡΠ΅Π² ΠΈ ΡΠ΅ΡΡΠ΅Ρ!
</button>
</>
)
}
Π‘ΡΠ΅ΡΡΠΈΠΊ
const CounterState = () => {
const [count, setCount] = useState(0)
return (
<>
<p>ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°: {count}.</p>
<button onClick={() => setCount(0)}>Π‘Π±ΡΠΎΡΠΈΡΡ</button>
<button onClick={() => setCount((prevVal) => prevVal + 1)}>
Π£Π²Π΅Π»ΠΈΡΠΈΡΡ (+)
</button>
<button onClick={() => setCount((prevVal) => prevVal - 1)}>
Π£ΠΌΠ΅Π½ΡΡΠΈΡΡ (-)
</button>
</>
)
}
ΠΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ
const Profile = () => {
const [profile, setProfile] = useState({
firstName: 'ΠΠ²Π°Π½',
lastName: 'ΠΠ΅ΡΡΠΎΠ²'
})
const handleChange = ({ target: { value, name } }) => {
setProfile({ ...profile, [name]: value })
}
const { firstName, lastName } = profile
return (
<>
<h1>ΠΡΠΎΡΠΈΠ»Ρ</h1>
<form>
<input
type='text'
value={firstName}
onChange={handleChange}
name='firstName'
/> <br />
<input
type='text'
value={lastName}
onChange={handleChange}
name='lastName'
/>
</form>
<p>
ΠΠΌΡ: {firstName} <br />
Π€Π°ΠΌΠΈΠ»ΠΈΡ: {lastName}
</p>
</>
)
}
βοΈ @React_lib2 674
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ React ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΡΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠΎΡΠΌΠΎΠ·ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ:
- React DevTools ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ React ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π£ΠΌΠ΅Π΅Ρ ΡΠ½ΠΈΠΌΠ°ΡΡ perfomance ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΠ»ΡΡ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ.
- Why Did You Render (WDYR) Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ React DevTools ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Ρ
Π²Π°ΡΠ°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ WDYR. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠ΅Π½Π΄Π΅Ρ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΏΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ. ΠΠ°ΠΉΠ΄Π΅Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ WDYR ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² Π»ΠΎΠ³ΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
- React Render Tracker ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
βοΈ @React_lib
2 674
Π Π΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ startTransition
Ricky Hanlon ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ API startTransition ΠΈΠ· React 18, Ρ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ API ΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² perfomance ΠΏΡΠΎΡΠΈΠ»Π΅.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ Β«ΡΡΠΆΠ΅Π»ΡΠΌΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈΒ», ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΡΠ»Π°Π±ΡΡ
ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
. ΠΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ» ΡΠ΅ΡΠ΅Π½Π΄Π΅Ρ ΡΡΠΆΠ΅Π»ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. Π‘Π°ΠΌΡΠΉ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅Π½Π΄Π΅ΡΠ° ΡΡΠΆΠ΅Π»ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² React 17 ΡΠ΅ΡΠ΅Π· debounce, Ρ.Π΅. ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Ρ ΡΠ΅Π½Π΄Π΅Ρ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ°.
Π React 18 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π² startTransition, ΠΈ React ΡΠΆΠ΅ ΡΠ°ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅Π½Π΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΠΎΡΠ»Π΅ ΡΠ΅Π½Π΄Π΅ΡΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ°, React ΡΠ΅Π½Π΄Π΅ΡΠΈΡ transition ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³, React Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΠΈ:
- Yielding: ΠΊΠ°ΠΆΠ΄ΡΠ΅ 5 ΠΌΡ React ΡΡΠ°Π²ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅Π½Π΄Π΅ΡΠ° Π½Π° ΠΏΠ°ΡΠ·Ρ, ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΡΡΠ³ΡΡ ΡΠ°Π±ΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠΌΠΈΡΡ.
- ΠΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅: React ΡΡΠ°Π²ΠΈΡ ΡΠ΅Π½Π΄Π΅Ρ Π½Π° ΠΏΠ°ΡΠ·Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»Π·ΡΠ½ΠΎΠΊ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ° ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ°.
- ΠΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡ
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²: ΠΊΠΎΠ³Π΄Π° React Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΎΠ½ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ Π½ΠΎΠ²ΡΠΉ.
https://github.com/reactwg/react-18/discussions/65
βοΈ @React_lib
2 674
CSS-Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΊΠ°ΠΊ DOM-based ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
https://medium.com/bbc-design-engineering/css-animations-as-a-dom-based-animations-framework-d6ef582c033a
βοΈ @React_lib
2 674
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ
ΡΠΊ useInsertionEffect Π² React 18
CSS-in-JS Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΡΡΠΈΠ»ΠΈ Π½Π° Π»Π΅ΡΡ ΠΈ Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΈΡ
Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ. ΠΠ»Ρ ΡΡΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π³ΠΈ <style> Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, Ρ.ΠΊ. ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ CSS ΠΏΡΠ°Π²ΠΈΠ» Π±ΡΠ°ΡΠ·Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠΈΠ»ΠΈ Ρ Π²ΡΠ΅Ρ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π»ΠΈΡΠ½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ΅ΡΠ° ΡΡΠΈΠ»Π΅ΠΉ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ CSS ΠΏΡΠ°Π²ΠΈΠ», Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡ
ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ DOM, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° React ΠΌΡΡΠΈΡΡΠ΅Ρ DOM, ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ clientWidth) ΠΈ Π΄ΠΎ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ
ΡΠΊ
useInsertionEffect. ΠΠΎ ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΎΠ½ ΠΏΠΎΡ
ΠΎΠΆ Π½Π° useEffect, Π½ΠΎ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ DOM.
ΠΠ½ΡΡΡΠΈ Ρ
ΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ DOM ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ <style> ΠΈΠ»ΠΈ <defs>. ΠΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Ρ
ΡΠΊΠΎΠΌ useLayoutEffect. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ
ΡΠΊΠ° β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΠ»Π΅ΠΉ Π² CSS Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
.
function useCSS(rule) {
useInsertionEffect(() => {
if (!isInserted.has(rule)) {
isInserted.add(rule);
document.head.appendChild(getStyleForRule(rule));
}
});
return rule;
}
function App() {
let className = useCSS(rule);
return <div className={className} />;
}
https://blog.saeloun.com/2022/06/02/react-18-useinsertioneffect
βοΈ @React_lib2 674
Π‘Π°ΠΌΠ°Ρ ΠΌΠΎΡΠ½Π°Ρ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΠ° ΠΏΠΎ React JS
https://dev.to/bricourse/the-most-powerful-react-js-cheat-sheet-4ipd
2 674
300+ Π²ΠΎΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ React
https://dev.to/sakhnyuk/300-react-interview-questions-2ko4
2 674
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π° React Ρ ΠΏΠΎΠΌΠΎΡΡΡ Error Boundary
https://dev.to/ms_yogii/handle-errors-gracefully-with-react-error-boundary-25mb
2 674
ΠΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΌΠΈΠ΄Π»Π²Π°Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π΄Π»Ρ Redux Toolkit
Π Redux Toolkit 1.8 Π²ΡΡΠ»ΠΎ Π½ΠΎΠ²ΠΎΠ΅ API
createListenerMiddleware Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π° ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΊΡΠ΅Π½ΠΎΠ² ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΉΡΠ°. ΠΡΠΎ API Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
saga ΠΈΠ»ΠΈ observable.
// Create the middleware instance and methods
const listenerMiddleware = createListenerMiddleware()
// Add one or more listener entries that look for specific actions.
// They may contain any sync or async logic, similar to thunks.
listenerMiddleware.startListening({
actionCreator: todoAdded,
effect: async (action, listenerApi) => {
// Run whatever additional side-effect-y logic you want here
console.log('Todo added: ', action.payload.text)
// Can cancel other running instances
listenerApi.cancelActiveListeners()
// Run async logic
const data = await fetchData()
// Pause until action dispatched or state changed
if (await listenerApi.condition(matchSomeAction)) {
// Use the listener API methods to dispatch, get state,
// unsubscribe the listener, start child tasks, and more
listenerApi.dispatch(todoAdded('Buy pet food'))
listenerApi.unsubscribe()
}
},
})
Π ΡΠ²ΠΎΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Redux Toolkit, ΠΠ°ΡΠΊ ΠΡΠΈΠΊΡΠΎΠ½, ΡΠ°ΡΡΠΊΠ°Π·Π°Π» ΠΎΠ± ΠΈΡΡΠΎΡΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ API ΠΈ ΡΡΠ°ΠΏΠ°Ρ
Π΅Π³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΠΈ Π±ΡΠ»Π° Π½Π°ΡΠ°ΡΠ° 2.5 Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ API ΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ.
Π ΠΎΡΠ½ΠΎΠ²Π΅ Ρ Redux Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ:
- Thunks: ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΊΡΠ΅Π½, ΠΏΠΎΠ»ΡΡΠΈΡΡ (dispatch, getState) Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ
ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π»ΡΠ±ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
- Sagas: Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΡΠΊΡΠ΅Π½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ.
- Observables: Π½Π°ΠΏΠΈΡΠΈΡΠ΅ RxJs ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΠΊΡΠ΅Π½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Redux Toolkit Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ Thunks, ΠΊΠ°ΠΊ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ API createListenerMiddleware ΠΊΠΎΠΌΠ°Π½Π΄Π° Redux Toolkit Ρ
ΠΎΡΠ΅Π»Π° ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΡΠΊΡΠ΅Π½Ρ ΠΈ ΡΠ°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡΡ, Ρ.Π΅. ΡΠΌΠΎΡΡΠ΅Π»Π° Π² ΡΡΠΎΡΠΎΠ½Ρ redux-saga. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ API Π±ΡΠ»Π° ΡΠ΅Π»Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π±Π»ΠΈΠ·ΠΊΠΈΠΌ ΠΊ redux-thunk.
https://blog.isquaredsoftware.com/2022/03/designing-rtk-listener-middleware/2 674
Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ React Hooks
https://dev.to/said_mounaim/awesome-things-related-to-react-hooks-30c4
2 674
ΠΠ°ΠΊ React 18 ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π£ΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ React Π΄ΠΎ 18 Π²Π΅ΡΡΠΈΠΈ, ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ, ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
. Π‘Π²ΡΠ·Π°Π½ΠΎ ΡΡΠΎ Ρ Π½ΠΎΠ²ΡΠΌ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΡΠ°Π±ΠΎΡΡ StrictMode.
Π dev ΡΠ΅ΠΆΠΈΠΌΠ΅ React Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·, Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΈ Π²ΡΠΎΡΠΎΠΌ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ. ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ React ΠΌΠΎΠ³ ΡΠ΄Π°Π»ΡΡΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΠΈΠΈ UI Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΉΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΡΠ΅ΠΊΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅:
* React mounts the component.
* Layout effects are created.
* Effect effects are created.
* React simulates effects being destroyed on a mounted component.
* Layout effects are destroyed.
* Effects are destroyed.
* React simulates effects being re-created on a mounted component.
* Layout effects are created
* Effect setup code runs
ΠΠ»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ΅ΠΊΡΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ Π±ΡΠ»ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½Ρ, Ρ.Π΅., Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ΅ΡΡΡΡ Π² ΡΡΡΠ΅ΠΊΡΠ΅ ΡΠ΄Π°Π»ΡΠ»ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠΈΡΡΠΊΠΈ.
Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈ ΠΏΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ useEffect ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π±Π°Π³ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
function useIsMounted() {
const isMountedRef = React.useRef(true);
React.useEffect(() => {
return () => {
isMountedRef.current = false;
};
}, []);
return () => isMountedRef.current;
}
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ
ΡΠΊ Π²ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. Π React 18 Π΄Π°Π½Π½ΡΠΉ Ρ
ΡΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Ρ.ΠΊ. ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΡΡΡΠ΅ΠΊΡΠΎΠ² React Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈ ΠΎΡΠΈΡΠ°ΡΡ useEffect. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Ρ
ΡΠΊ, Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΌΠΎΠΌ ΡΡΡΠ΅ΠΊΡΠ΅:
React.useEffect(() => {
isMountedRef.current = true;
return () => {
isMountedRef.current = false;
};
}, []);2 674
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°: Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ SSR-ΡΠΎΠΏΠ»ΠΈΠ²Π΅
ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, Π½ΠΎ ΠΊΠ°ΠΊΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π½Π° Ρ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ? ΠΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π²ΡΠ±ΡΠ°ΡΡ β Π³ΠΎΡΠΎΠ²ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅? ΠΠ°ΠΊΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°?
https://habr.com/ru/company/superjob/blog/660681/
2 674
Fiber ΠΈΠ·Π½ΡΡΡΠΈ: ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΠΏΡΠΎΠΏΡΠΎΠ² Π² React
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Fiber, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠΈΡΠ°Π΅ΡΡΡ React Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΡΠΎΠΏΡΠΎΠ² Π² Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.
https://indepth.dev/posts/1009/in-depth-explanation-of-state-and-props-update-in-react
2 674
ΠΠ½ΠΈΠΌΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ React
ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ β ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΠΌ ΠΈ ΠΎΡΠ·ΡΠ²ΡΠΈΠ²ΡΠΌ. ΠΡΠΎ ΠΌΠ΅Π»ΠΎΡΡ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ Π² ΠΈΡΠΎΠ³Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΊΠ»Π°ΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΈΠΌΡΡ ΡΡΠ°ΡΡΠ΅ΠΉ, Π³Π΄Π΅ Π°Π²ΡΠΎΡ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ React.
πΠ§ΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΡ
