如何访问普通函数(不是React组件)中的redux状态?

时间:2019-06-25 12:18:14

标签: react-native redux

我有一个包含不同功能的js文件,我需要在其中一些功能中访问更新的redux状态,但我不知道如何获取redux状态。

我尝试使用此代码创建一个文件,并将其命名为reduxStore.js:

import { createStore } from 'redux';
import reducers from './../reducers';

const storeBox = createStore(reducers);

export default storeBox;

并且在我的目标js文件中,我尝试像这样导入它:

import storeBox from './reduxStore';

然后我尝试访问函数内部的状态:

export function PlaySounds(type, state, soundSetting = null) {
    let states = storeBox.getState();
    console.log('ssss', states)
    if (states.settingPage.music) {
        switch (type) {
            case 'gamemusic':
                if (state == true) {
                    gameSound.play().setNumberOfLoops(-1);
                    //sound.setNumberOfLoops(-1);
                } else {
                    //console.log('stopped Trigger')
                    gameSound.setCurrentTime(0).stop();
                }
                break;
            case 'singlemode':
                if (state == true) {
                    singlemode.play().setNumberOfLoops(-1);
                } else {
                    singlemode.setCurrentTime(0).stop();
                }
                break;
            case 'singlemodeFast':
                if (state == true) {
                    singlemodeFast.play().setNumberOfLoops(-1);
                } else {
                    singlemodeFast.setCurrentTime(0).stop();
                }
                break;
            case 'singlemodeShock':
                if (state == true) {
                    singlemodeShock.play(() => {
                        singlemode.play().setNumberOfLoops(-1);
                    });
                    //sound.setNumberOfLoops(-1);
                } else {
                    singlemodeShock.stop();
                }
                break;
            case 'onlinemode':
                if (state == true) {
                    onlinemode.play().setNumberOfLoops(-1);
                    //sound.setNumberOfLoops(-1);
                } else {
                    onlinemode.setCurrentTime(0).stop();
                }
                break;
            case 'buttonClick':
                buttonClick.play();
                break;
            case 'winner':
                winnerSound.play();
                break;
        }
    }
}

但是问题是它将一直返回初始状态,而不是更新的redux状态。所以没用。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您尚未订阅商店。如果要查看更改,则需要连接到商店。尝试做

storeBox.subscribe(PlaySounds)