Π― ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΈΡΠΎΠΊ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΡΠΎΡ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠΏΠΈΡΠΎΠΊ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ. ΠΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ»ΠΈ Π² ΡΡΠΎΠΌ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
Uncaught Error: Invariant Violation: Expected to find a valid target
.n @ app.js:50803
t.canDropOnTarget @ app.js:50804
(anonymous function) @ app.js:50804
t.handleTopDragEnter @ app.js:50804
ΠΠΎΠ½ΡΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Ρ, Ρ ΡΠ΅Π³ΠΎ Π½Π°ΡΠ°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ, Π° Ρ ΠΌΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΌΠ΅Π½ΡΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ dist/ReactDnD.min.js
.
ΠΠ°ΠΌΠ΅ΠΊ? Π§ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠΌ Π΄Π»Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ?
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ?
ΠΠ°, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ΄.
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΈΠ· Π²Π°Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΡ Π² NPM, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ Π»Π΅Π³ΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π― ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ» ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄Π»Ρ Π²Π°Ρ, ΡΠ΅Π±ΡΡΠ°. ΠΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²Π΅ΡΠ½ΡΠ» Π² beginDrag
, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Ρ React Π±ΡΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠΈΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ³Π»Π° Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² React-Dnd.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ! ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΡ Π½Π΅ Π½Π°Π»Π°Π³Π°Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΎ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ beginDrag()
Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ² Π±ΡΠ» ΠΏΠΎΡΠΎΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΡΠ°ΡΡΡ Π²Π΅ΡΠΊΡ, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΊΡΠΎ-ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅.
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°, Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ (ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° Card Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ), ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠΊΡΠ°ΡΠ΅Π½ ΠΎΠ±Π΅ΠΈΠΌΠΈ_ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ³Π΄Π° simulateBeginDrag
Π½Π°ΡΠ°Π»ΠΎΡΡ, ΠΎΠ½ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» _drop target_ (Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ) Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ, ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π»ΠΎΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π³Π»ΡΠ±ΠΆΠ΅ (Ρ getDecoratedComponentInstance()
).
@yannisbarlas ΠΎΡΠ»ΠΈΡΠ½Π°Ρ Π½Π°Ρ ΠΎΠ΄ΠΊΠ°. Π― ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ
@yannisbarlas Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π½Π°Ρ ΠΎΠ΄ΠΊΡ! ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ½Π½Ρ ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²Π°Π½ΠΈΡ :)
ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π½Π°ΡΠΊΠ½Π΅ΡΡΡ Π½Π° ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΠΊΠ»ΡΡ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΡΠΏΠΈΡΠΊΠ΅.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ (ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ) ΠΊΠ»ΡΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
@yannisbarlas Π£ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ?
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ·Π΄Π½ΠΈΠΉ ΠΎΡΠ²Π΅Ρ @damiangreen , ΠΏΠΈΡΡΠΌΠΎ Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ»Π΅ΡΠ΅Π»ΠΎ ΠΌΠΈΠΌΠΎ ΠΌΠ΅Π½Ρ.
ΠΠΎΠ΄ ΡΡΡΠ°ΡΠ΅Π» (ΡΡΠΎ Π±ΡΠ»ΠΎ Π΄Π°Π²Π½ΠΎ), Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π³ΠΎ Π·Π΄Π΅ΡΡ .
ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΎΠΏΠΎΡΡ. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ» Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Redux Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ» ΠΊΠ»ΡΡ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
blocks.map((block, idx) => {
<React.Fragment key={`${block.name}_${idx}`}>
...
<React.Fragment />
})
ΡΡΠΎ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ idx
ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Π»Π΅ΡΡ.
ΡΠΏΠ°ΡΠΈΠ±ΠΎ @chulanovskyi
Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΎ ΡΠ°ΠΊ:
JSX
arr.map((item, idx) => (
<Item
item={item}
// key={`${idx}_${item.id}`} // this was busted because idx
key={item.key} // when adding this to the array elsewhere i use a count for uniqueness
index={idx}
>
</Item>
))
ΠΠ»Ρ ΠΌΠ΅Π½Ρ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ·Π²Π°Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ - ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ, React ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π±Π΅Π· ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΈ ΡΡΠΎ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π»Π°ΡΡΡ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Ρ ΠΎΡΡ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΡΠ΅Ρ ΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡΡΡ Ρ ΠΌΠΌ
ΠΠ»Ρ ΠΌΠ΅Π½Ρ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ·Π²Π°Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ - ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ, React ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π±Π΅Π· ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΈ ΡΡΠΎ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π»Π°ΡΡΡ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Ρ ΠΎΡΡ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΡΠ΅Ρ ΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡΡΡ Ρ ΠΌΠΌ
ΠΡΠΈΠ²Π΅Ρ, @DominicTobias
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΊ ΡΡ ΡΡΠΎ ΠΏΠΎΡΠΈΠ½ΠΈΠ»?
@ raymond-ong
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΊ ΡΡ ΡΡΠΎ ΠΏΠΎΡΠΈΠ½ΠΈΠ»?
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ ΡΠ½ΠΎΠ²Π° ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ (Π²Π΅ΡΡ
Π½ΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ response-dnd ΠΏΠΎΡΠ΅ΡΡΠ» ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (Π΅Π³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ), Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π», ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ id
ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π² ΡΠ΅Π΄ΡΠΊΡΠΎΡΠ΅ (ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΡΡΠΎΠ»Π±ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΠ»Π±ΡΡ ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ°). ΠΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ updating id functionality
Π²ΡΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Π£ ΠΌΠ΅Π½Ρ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π»Ρ drop Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ false Π½Π° canDrop. ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ»ΠΎΠΆΠΈΡΡ Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? ΠΡΠΎ-ΡΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΠ», ΡΡΠΎ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ, Π½ΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΡΠ΄Π° Π΅Π³ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ?
Π£ ΠΌΠ΅Π½Ρ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ, ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΠ² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ: https://codesandbox.io/s/broken-feather-qf0f2?file= /src/Container.jsx
Π― ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ (ΠΌΠΎΠΆΠ΅Ρ, ΠΌΠ½Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π·Π΄Π΅ΡΡ?) # 2693
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» Π΅Π΅ ΡΠ°ΠΊ:
ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄Π΅Π» ΠΊΠ°ΠΊ
const ParentOfCards = () => {
const [ cards, setCards ] = useState([ ... ])
const CardComponent = ({ card, index }) => {
return (/**/)
}
return (
<div>
{ cards.map( CardComponent ) }
</div>
)
}
ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ CardComponent
Π²Π½ΡΡΡΡ ParentOfCards
(Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΌ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ΠΎΠΌ), ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΎΠ½ ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ CardComponent
ΠΎΡ ParentOfCards
scope:
const ParentOfCards = () => {
const [ cards, setCards ] = useState([ ... ])
return (
<div>
{ cards.map( CardComponent ) }
</div>
)
}
const CardComponent = ({ card, index }) => {
return (/**/)
}
Π Π²ΠΎΡ (ΠΏΠΎΡΠ»Π΅ Π΄Π²ΡΡ Π΄Π½Π΅ΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ: c) ΡΠ°Π±ΠΎΡΠ°Π΅Ρ! π
@marcelomrtnz ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΡ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΠ»ΠΈ ΠΌΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅
Π― ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΠΈ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ response dnd lib, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ div ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΡΡΠΎΠΊ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ°ΡΡ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π» Ρ ΠΌΠ΅Π½Ρ Π±Π΅Π· ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ½ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»Ρ Π² ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
Π― ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΏΠ°ΡΠΈΠ±ΠΎ @marcelomrtnz
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. https://codesandbox.io/s/proud-wind-hklt6?file=/src/CreateForum.jsx
ΠΠΎΡ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ°. ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ 1ba Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ 1, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ 1ba Π²Π½ΠΈΠ·.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π½Π°ΡΠΊΠ½Π΅ΡΡΡ Π½Π° ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΠΊΠ»ΡΡ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΡΠΏΠΈΡΠΊΠ΅.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ (ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ) ΠΊΠ»ΡΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.