9

所以我有一个包含密码和用户名的凭据对象

payload: Object
  credentials: Object
    password: ""
    username: ""

我想在减速器配置中将密码列入黑名单,例如

const authPersistConfig = {
    key: 'AuthReducer',
    storage: storage,
    blacklist: ['credentials.password']
};

如果我使用此代码,则两种凭据状态最终都会被列入黑名单。我想保留用户名而不是密码。

可能是 redux-persist 只保留顶级状态,或者可能是语法错误,或者完全是其他东西 - 有什么想法吗?

非常感谢

4

4 回答 4

2

您可以使用问题 #277 - Whitelist reducer subpropertyredux-persist-transform-filter中所述的 NPM 包吗?redux-persist

于 2018-08-31T18:00:52.823 回答
1

或者,如果您不想完全删除键,而只是清除任何嵌套状态对象中的任何数据,这里是使用“redux-persist”中的createTransform的示例

如何为嵌套状态制作 redux-persist 黑名单?

于 2020-09-11T10:40:46.867 回答
0

您可以使用 pick 或 omit 将特定一级存储条目的任何嵌套值列入白名单或黑名单。这是一个例子:

let blacklistTransform = createTransform((inboundState, key) => {
    if (key === 'credentials') {
        return omit(inboundState, ['password']);
    } else {
        return inboundState;
    }
});

const persistConfig = {
    key: 'root',
    storage: AsyncStorage,
    blacklist: ['credentials'], // Avoid credentials entry
    transforms: [blacklistTransform],
};

白名单示例:

// Just persist dropdown default values
const whitelistTransform = createTransform((inboundState, key) => {
    // Select values from the route reducer
    if (key === 'route') {
        return pick(inboundState, [
            'lastSelectedSchoolYear , lastSelectedSite',
            'lastSelectedState',
        ]);
    }
    return inboundState;
});

const persistConfig = {
    key: 'root',
    storage,
    transforms: [whitelistTransform],
};
于 2021-08-06T19:00:15.070 回答
0

您可以进行嵌套持久配置。

const rootPersistConfig: any = {
  key: "root",
  timeout: 500,
  storage: AsyncStorage,
  blacklist: ["credentials"],
};
const credentialsPersistConfig: any = {
  key: "credentials",
  storage: AsyncStorage,
  whitelist: ["username"],
};
const rootReducer = combineReducers({
  credentials: persistReducer(credentialsPersistConfig, CredentialReducer),
});
const persistedReducer = persistReducer(rootPersistConfig, rootReducer);
于 2021-03-16T16:45:18.407 回答