我正在尝试使用redux-persist在我的react-native项目中设置一个jest快照测试.我不认为它是es2015导入问题,因为我的测试代码看起来像这样:
import React from "react"
import "react-native"
// Note: test renderer must be required after react-native.
import renderer from "react-test-renderer"
import App from "../App"
it("renders correctly", () => {
const app = renderer.create(<App />).toJSON()
expect(app).toMatchSnapshot()
})
Run Code Online (Sandbox Code Playgroud)
在我添加之前我运行了完全相同的测试redux-persist并且它正在工作.
jest引发的错误:
●测试套件无法运行
/Users/a_050313/Documents/dev/scheduling/node_modules/redux-persist/es/integration/react.js:9
import React, { PureComponent } from 'react'; // eslint-disable-line import/no-unresolved
^^^^^^
SyntaxError: Unexpected token import
1 | import React, { Component } from "react"
2 | import { Provider } from "react-redux"
> 3 | import { PersistGate …Run Code Online (Sandbox Code Playgroud) 刷新我的网站后,我需要在 Redux 中保持状态。什么是最简单的方法来做到这一点?如果可能的话,我宁愿不希望使用 redux-persist。
在官方文档中,它说添加一个额外的减速器以清除当前切片的状态,但是到处都没有明确的示例
import { PURGE } from "redux-persist";
extraReducers: (builder) => {
builder.addCase(PURGE, (state) => {
customEntityAdapter.removeAll(state);
});
}
Run Code Online (Sandbox Code Playgroud)
如何导入或从哪里获取customEntityAdapter,当我调用persistorObjectthen purge 时,它显示错误,任何人都可以给我一些说明,谢谢我很欣赏 redux-toolkit 和https://redux-toolkit.js.org的清晰示例/usage/usage-guide#use-with-redux-persist
我尝试在 redux-persist v5 中使用白名单。
我在 Stack Overflow 上关注了这个答案,如下所示
persistStore(store, { whitelist: ['messages'] });
Run Code Online (Sandbox Code Playgroud)
但是,我收到了错误
传递给 persistStore 的选项无效:“白名单”。您可能错误地将 persistConfig 传递到 persistStore 中,而它应该传递到 persistReducer 中。
然后我在阅读 redux-persist 自述文件后尝试了类似下面的内容
const transform = createTransform(null, null, {
whitelist: [
'messages'
]
});
const config = {
key: 'state',
storage: localForage,
transforms: [transform]
};
const reducer = persistReducer(config, rootReducer);
Run Code Online (Sandbox Code Playgroud)
但这不起作用。它仍然通过 localForage 保存所有内容。
那么在 redux-persist v5 中使用白名单的正确方法是什么?
我尝试将redux-immutable与redux-persist一起使用。
我进行了很多搜索,但没有找到任何解决方案来解决这个问题。
商店.js:
import { createStore, applyMiddleware } from 'redux';
import { composeWithDevTools } from 'remote-redux-devtools';
import logger from 'redux-logger';
import { createEpicMiddleware } from 'redux-observable';
import immutableTransform from 'redux-persist-transform-immutable';
import { persistStore, persistReducer } from 'redux-persist';
import { combineReducers } from 'redux-immutable';
import { Map } from 'immutable';
import { routerReducer } from 'react-router-redux';
import storage from 'redux-persist/lib/storage';
import createFilter from 'redux-persist-transform-filter';
import epics from './epics';
import reducers from './reducers';
const middlewares = [createEpicMiddleware(epics), logger];
const …Run Code Online (Sandbox Code Playgroud) 我在ReduxPersist的 GitHub 页面上找不到任何内容
我有一段代码正在尝试理解,由于该autoRehydrate代码已被删除,我想知道应该如何使用redux-persist.
import { AsyncStorage } from 'react-native';
import { applyMiddleware, createStore } from 'redux';
import { autoRehydrate, persistStore } from 'redux-persist'
import thunk from 'redux-thunk';
import reducers from '../reducers';
const middleWare = [thunk];
const createStoreWithMiddleware = applyMiddleware(...middleWare)(createStore);
export default configureStore = (onComplete) => {
const store = autoRehydrate()(createStoreWithMiddleware)(reducers);
persistStore(store, { storage: AsyncStorage }, onComplete);
return store;
};
Run Code Online (Sandbox Code Playgroud)
我找到了一些教程,但它只是说这个autoRehydrate必须存在,但没有解释它实际上是做什么的。
使用 ReactNative + Redux-persist 5.10 时出现错误 - console.error:“redux-persist:超时后调用的“root”补水。
我正在尝试将 redux-persist 集成到我的 react-native 项目中。目的是在应用程序重新启动之间保留 redux 存储的数据,以便用户无需在每次启动应用程序时登录。另外,我想将以前查看的数据存储在本地存储上,以避免每次重新启动应用程序时重新查询所有数据。
我按照下面的代码添加了 redux 持久支持:
import { AsyncStorage } from 'react-native';
import { createStore, applyMiddleware } from 'redux';
//import { createLogger } from 'redux-logger';
import { persistStore, persistReducer } from 'redux-persist';
import rootReducer from '../reducers/index';
import ReduxThunk from 'redux-thunk';
import { createTransform } from 'redux-persist';
import JSOG from 'jsog';
export const JSOGTransform = createTransform(
(inboundState, key) => JSOG.encode(inboundState),
(outboundState, key) => JSOG.decode(outboundState),
)
const persistConfig = {
// Root
key: 'root',
// Storage Method (React …Run Code Online (Sandbox Code Playgroud) 这是我的persistConfig和代码store,我想添加blacklistfor tracking,但不是为所有跟踪状态,而只是为tracking.checkingOut, tracking.checkingInand tracking.searching,如何正确执行此操作?我知道如果我想完全删除跟踪,我需要在blacklist: ['tracking']inside 中写入persistConfig,但我不确定在嵌套状态的情况下该怎么做。
const persistConfig = {
key: 'root',
storage: AsyncStorage,
}
const persistedReducer = persistReducer(persistConfig, reducers)
const createStoreWithMiddleware = applyMiddleware(thunkMiddleware)(createStore);
export const store = createStoreWithMiddleware(persistedReducer);
export const persistor = persistStore(store);
Run Code Online (Sandbox Code Playgroud)
如果我像这样添加黑名单: blacklist: ['tracking.checkingOut', 'tracking.checkingIn', 'tracking.searching'] 会起作用吗?或者应该有不同的方法?
我已经按照文档中的建议使用react-toolkit设置了redux-persist。现在我需要进行一些补液操作,我该怎么做?这是我尝试过但不起作用的。
...
import { REHYDRATE } from 'redux-persist'
...
const accessControl = createSlice({
name: 'accessControl',
initialState,
reducers: {
loginStart(state: AccessControlState) {
state.isLoading = true
},
loginSucces(state: AccessControlState, action: PayloadAction<LoginResponsePayload>) {
state.isAuthenticated = true
state.token = action.payload.access_token
state.isLoading = false
state.error = null
},
loginFailed(state: AccessControlState, action: PayloadAction<string>) {
state.isAuthenticated = false
state.token = ''
state.isLoading = false
state.error = action.payload
},
logout(state: AccessControlState) {
state.isAuthenticated = false
state.token = ''
state.isLoading = false
state.error = null
},
[REHYDRATE]: (state: AccessControlState) …Run Code Online (Sandbox Code Playgroud) redux-persist ×10
reactjs ×7
redux ×6
react-native ×5
javascript ×4
react-redux ×2
jest ×1
typescript ×1