#reactjs #design-patterns
#reactjs #шаблоны проектирования
Вопрос:
Я создаю музыкальное приложение с помощью React, и я новичок 🙂
Моя цель —
- загрузите список воспроизведения JSON (отформатированный как JSPF)
- отображение списка воспроизведения на основе этого JSON
- заполните очередь проигрывателя дорожками списка воспроизведения.
Итак, я работаю над несколькими компонентами: дорожкой, списком дорожек, списком воспроизведения и плеером.
- В списках дорожек есть дорожки.
- Список воспроизведения и проигрыватель имеют список дорожек (и другие вещи): очередь проигрывателя — это компонент списка дорожек.
- Проигрыватель не является потомком плейлиста, он находится в стороне. Например, я хочу иметь возможность ставить в очередь (или отменять очередь) некоторые треки списка воспроизведения в проигрыватель.
Я хочу иметь возможность делиться / синхронизировать реквизит a (тот же) Дорожка между списком воспроизведения и плеером :
Допустим, у меня есть любимый реквизит для трека.
Я бы переключил его, нажав кнопку, вложенную в компонент дорожки. Мне нужно обновить реквизит обоих треков, либо если я нажму кнопку в списке воспроизведения, либо в проигрывателе; и наоборот: все реквизиты должны быть «синхронизированы».
Могу ли я сделать это с помощью React и как?
Большое спасибо за ваши советы!
Комментарии:
1. Поднимите его: reactjs.org/docs/lifting-state-up.html
Ответ №1:
У вас должен быть компонент контейнера и другие компоненты (дорожка, список дорожек, список воспроизведения и проигрыватель) в качестве дочерних элементов компонента контейнера, компонент контейнера может передавать реквизиты дочерним элементам и использовать функции в качестве реквизита, поэтому может иметь всю логику.
Вы можете проверить этот пример: https://github.com/upretim/thinking-in-react /
В этом примере все компоненты, кроме компонента приложения, являются немыми / функциональными компонентами, приложение является интеллектуальным / с сохранением состояния или контейнерным компонентом, в котором есть вся логика и данные. В примере значение filter разделяется между дочерними компонентами с использованием родительского компонента.
Комментарии:
1. Я планирую внедрить это на веб-сайт WordPress: там будет проигрыватель и iframe для контента (и, следовательно, плейлисты), чтобы я мог перемещаться, не прерывая плеер. Значит, это не может работать так, как вы сказали, не так ли?