У меня есть компонент с общим состоянием, который должен быть синхронизирован c.
Одна часть состояния устанавливает текущий тип музыкальной шкалы, который должен поддерживать все возможные масштабы, но я начинаю с несовершеннолетним и основным. Вторая часть состояния устанавливает правильные примечания для выбранного имени примечания, основанного на выбранном типе масштаба. У меня это в основном работает, но мне нужно лучше синхронизировать состояние, чтобы один мог реагировать на другое.
Несколько человек в сообществе реагирования рекомендовали «поднять состояние», что Я пытаюсь понять, как это сделать правильно, особенно с помощью хуков.
Итак, я смог выяснить, как поднять состояние нот музыкальной гаммы, которое было установлено на компонентах, в некоторые объекты, заполненные массивами, но теперь мне нужно выяснить, как поднять функцию onClick
в следующем коде, и есть 12 из этих компонентов имен нот, и каждый из них устанавливает различные музыкальные масштабы в состояние notes
:
<NoteInput
id="c"
scale={scale}
type="radio"
name="notes"
label="c"
value="c"
onClick={
() => setNotes(
scale === 'minor' ? scalePatterns['c-minor'] :
scale === 'major' ? scalePatterns['c-major'] :
''
)
}
/>
<NoteLabel
whileHover={{ scale: 1 }}
whileTap={{ scale: 0.9 }}
scale={scale}
htmlFor="c"
>
{
scale === 'major' ? 'C' :
scale === 'minor' ? 'C' :
'C'
}
</NoteLabel>
Так что теперь мне нужно выяснить, как «поднять» функцию стрелки в подпорке onClick в ее собственную функцию, но я не знаю, как это сделать go, так как требование заключается в том, что мне нужно передавать разные состояния каждому экземпляру функции, но поддерживать это состояние в синхронизации c с другим фрагментом состояния, который устанавливает sc Укажите, на что затем реагируют кнопки примечания.
ОБНОВЛЕНИЕ:
При ближайшем рассмотрении я считаю, что состояние работает следующим образом:
Scale Type
| \
| \
| Root Note
| /
| /
Scale Notes
... где Тип шкалы влияет как на выбранную ноту root (например, C# или Db), так и на ноты для самой шкалы. Тогда примечаниям шкалы ТАКЖЕ нужно знать примечание root в сочетании с типом шкалы.