【问题标题】:Switching theme using Redux is not working使用 Redux 切换主题不起作用
【发布时间】:2021-07-09 00:15:43
【问题描述】:

这是我的 configureStore.js 文件

import {createStore, applyMiddleware, compose, combineReducers} from 'redux';
import thunk from 'redux-thunk';
import {persistStore, persistReducer} from 'redux-persist';
import AsyncStorage from '@react-native-async-storage/async-storage';

import {stateReducer, themeReducer, authReducer} from './index';

const persistConfig = {
  key: 'root',
  storage: AsyncStorage,
  whitelist: ['themeReducer'],
};

const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const rootReducer = combineReducers({stateReducer, themeReducer, authReducer});
const persistedReducer = persistReducer(persistConfig, rootReducer);

export default () => {
  let store = createStore(
    persistedReducer,
    composeEnhancer(applyMiddleware(thunk)),
  );
  let persistor = persistStore(store);
  return {store, persistor};
};

我在此文件中添加了redux-persist,因为我希望主题在更改时保持不变。此设置时没有出现错误,但是当我尝试更改主题时,它不会切换。我使用

访问了主题的状态
const theme = useSelector(state => state.themeReducer.theme) 

这是themeReducer

import {lightTheme, darkTheme, SWITCH_THEME} from '../../components/index';

const initialState = {
  theme: lightTheme,
};

const themeReducer = (state = initialState, action) => {
  switch (action.type) {
    case SWITCH_THEME:
      return {
        theme: action.theme,
      };
    default:
      return state;
  }
};

export default themeReducer;

这是switchTheme 操作

import {SWITCH_THEME} from './../../redux';

export const switchTheme = theme => {
  try {
    return dispatch => {
      dispatch({
        type: SWITCH_THEME,
        theme: theme,
      });
    };
  } catch (error) {
    console.log(error);
  }
};

主题开关位于DrawerContent 文件中,如下所示。 theme.state 有一个布尔值。

   <Drawer.Section>
      <Preferences>Preferences</Preferences>
      <TouchableRipple onPress={() => {
          theme.mode === 'light'
            ? dispatch(switchTheme(darkTheme))
            : dispatch(switchTheme(lightTheme));
          console.log('Theme state: ', theme.state);
          console.log('Theme mode: ', theme.mode);
        }}>
        <View style={styles.preference}>
          <Text style={{color: theme.text}}>Dark Theme</Text>
          <View pointerEvents="none">
            <Switch value={theme.state} />
          </View>
        </View>
      </TouchableRipple>
    </Drawer.Section>

【问题讨论】:

    标签: react-native react-redux redux-persist


    【解决方案1】:

    我找到了我的解决方案。我从 themeReducer 的错误位置导入了 SWITCH_THEME

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2021-09-14
      • 2020-10-18
      • 2018-01-04
      • 1970-01-01
      相关资源
      最近更新 更多