我正在编写一个React-Native倒数计时器应用程序,在该应用程序中我想在某些秒以及其他事件中播放声音。我找不到有关如何在Redux应用程序中处理声音加载和播放声音的更多信息。我找到了一种实现,其中声音对象存储在Redux存储中,并且声音是使用Redux中间件播放的,例如(source):
MiddlewareRegistry.register(store => next => action => {
switch (action.type) {
case PLAY_SOUND:
_playSound(store, action.soundId);
break;
return next(action);
});
/**
* Plays sound from audio element registered in the Redux store.
*
* @param {Store} store - The Redux store instance.
* @param {string} soundId - Audio element identifier.
* @private
* @returns {void}
*/
function _playSound({ getState }, soundId) {
const sounds = getState()['features/base/sounds'];
const sound = sounds.get(soundId);
if (sound) {
if (sound.audioElement) {
sound.audioElement.play();
} else {
logger.warn(`PLAY_SOUND: sound not loaded yet for id: ${soundId}`);
}
} else {
logger.warn(`PLAY_SOUND: no sound found for id: ${soundId}`);
}
}
但是,Redux文档建议不要将不可序列化的数据存储在该实现中违反的存储中。
我的想法是在Redux存储中存储一个待处理的声音数组,并让一个容器监听此数组的更改,依次播放声音并使用动作创建者将其删除。这听起来像是一种合理的方法,还是在Redux中有更好的方法来处理声音?