У меня есть небольшой проект React, в котором пользователь может добавлять заметки в строку, а затем воспроизводить MIDI-аудио добавленных заметок (используя Reaction-ab c / ab cjs ). Выбранные ноты также должны анимироваться, используя response-transition-group .
Моя проблема заключается в том, что только одна из этих функций (MIDI / анимация) будет работать одновременно, и какие одна работа зависит от родительских компонентов key
свойство. Два ключа
key={rowIndex + rowNotation}
key={rowIndex}
// where `rowNotation` is the updated data of what the MIDI should play when every new card is added
/* If `key` = `rowIndex + rowNotation`, MIDI will play when green button is pushed, but
react-transition-group will not perform an animation when adding / removing notes
If `key` = `rowIndex`, react-transition-group will perform enter / exit
animations, but react-abc MIDI will NOT play
*/
Я могу понять, почему анимация перестала работать - если ключ обновляется с новыми данными, а не только с индексом, компонент будет повторно отображаться, что означает, что анимация не может произойти .
Но я не могу понять, почему MIDI перестает работать должным образом, когда ключ является просто индексом.
Мне потребовалось довольно много времени, чтобы понять, что ключ вызывает MIDI к хватит играть. Я попытался переместить компонент MIDI в разные места безрезультатно, и я довольно озадачен.
Я создал (надеюсь простую) рабочую изолированную программную среду моей проблемы с инструкциями для репликации: https://codesandbox.io/s/transition-group-x-abc-midi-bug-hunt-so-279pv?fontsize=14&hidenavigation=1&theme=dark
Я прокомментировал каждый основной компонент с информацией, но 2 наиболее важных компонента для моей проблемы:
Board.js
: где ключ можно изменить, чтобы продемонстрировать проблема
CardRow.js
: где расположены фактические компоненты react-abc
/ Midi
и react-transition-group
.