#javascript #reactjs #redux #redux-persist
#javascript #reactjs #redux #redux-persist
Вопрос:
Я создаю хранилище своего приложения:
import {configureStore} from '@reduxjs/toolkit';
import {persistStore, persistReducer} from 'redux-persist';
import createFilter from 'redux-persist-transform-filter';
import storage from 'redux-persist/lib/storage';
import rootReducer from './rootReducer';
const whiteListFilter = createFilter('references', 'label');
const persistConfig = {
key: 'root',
storage,
whiteListFilter,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
const store = configureStore({
reducer: persistedReducer,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: false,
}),
});
const persistor = persistStore(store);
export {store, persistor};
и referenceSlice.js:
import {createSlice} from "@reduxjs/toolkit"
const initialState = {
label: '',
references: [],
error: '',
}
const referenceSlice = createSlice({
name: 'reference',
initialState,
reducers: {
updateReference(state, action){
state = Object.assign(state, action.payload);
}
}
});
export default referenceSlice.reducer;
export const {updateReference} = referenceSlice.actions
Presentation.jsx:
import React from 'react';
import {useDispatch} from 'react-redux';
import {updateReference} from 'referenceSlice';
const Presenter = () => {
const dispatch = useDispatch();
const [label, setLabel] = React.useState('');
const [error, setError] = React.useState('');
const [touched, setTouched] = React.useState(false);
const handleChange = (e) => {
setLabel(e.target.value);
}
const handleBlur = (e) => {
setTouched(true)
if(e.target.value) {
dispatch(updateReference(label));
}else {
setError('required*')
}
}
return(
<div>
<TextField
label='Reference label'
onChange={handleChange}
onBlur={handleBlur}
helperText={touched amp;amp; error ? error : ''}
/>
<OtherComponent />
</div>
);
export default Presenter;
Проблема здесь в том, что я хочу сохранить только некоторые атрибуты из редуктора ссылок, но в этом случае весь редуктор был сохранен. Как я могу это исправить?
Ответ №1:
Redux-persist ищет массив в фильтре белого списка, это должны быть имена ключей в вашем rootReducer.
См. https://github.com/rt2zz/redux-persist#blacklist—whitelist
// WHITELIST
const persistConfig = {
key: 'root',
storage: storage,
whitelist: ['navigation'] // only navigation will be persisted
};
Также полезно отметить, что внесение вложенных атрибутов в черный список возможно, просто сделано немного странным способом, когда вам нужно занести в черный список полный редуктор и создать отдельную конфигурацию для занесенного в черный список редуктора, в котором в черный список занесены только некоторые атрибуты.
Комментарии:
1. Я попробовал, но проблема не устранена, весь редуктор был сохранен в локальном хранилище, а не только упомянутые атрибуты, которые я хочу сохранить.