通常在Redux应用程序中如何处理声音?

时间:2018-09-13 06:21:15

标签: react-native audio redux

我正在编写一个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中有更好的方法来处理声音?

0 个答案:

没有答案