Я пытаюсь написать модульное музыкальное приложение с использованием Web Audio API и React.
До этого момента я создавал узлы веб-аудио, такие как фильтры, осцилляторы и т. Д. При создании компонентов React:
class Filter extends React.Component {
constructor(props) {
super(props);
const filter = props.context.createBiquadFilter();
this.state = { filter };
}
...
Позже это означает, что возможноизмените фильтр как часть состояния компонента:
frequencyChange(event) {
...
this.state.filter.frequency.setValueAtTime(range.value, context.currentTime);
}
и в методе рендеринга:
<input type="range" className="slider" min={20} max={20000}
onChange={event => this.frequencyChange(event)}/>
Однако, когда дело доходит до объединения фильтров, мне нужно иметь возможностьdisconnect()
узел фильтра Web Audio, который я создал из родительского класса этого компонента, и connect()
его нового назначения.
Допустим, родительский компонент называется EffectsBox
и предназначенотобразить произвольный список эффектов, таких как Filter
.
Как он должен отображать все эти компоненты, а также позволять им предоставлять некоторые общие API для объединения аудио вместе?
Где долженсостояние - т.е. веб-аудио компоненты - для этих эффектов будут сохранены?
Вот пример кода, который, надеюсь, прояснит мой вопрос:
class EffectsBox extends React.Component {
...
addNewEffect(effect) {
// disconnect() the previous effect and connect() it to a new one
}
render() {
// Maybe some kind of "map" here between effects and react components?
return <div>{ this.state.effects }</div>
}
Примечание: я читал об API React refs
, но это не таккажется подходящим для использования с произвольным числом дочерних классов - очень рад, если его показывают иначе!