gpt4 book ai didi

reactjs - redux saga 选择器,如何从 saga 访问状态?

转载 作者:行者123 更新时间:2023-12-03 13:11:28 27 4
gpt4 key购买 nike

以前也有人问过类似的问题,但答案对我没有任何帮助。

What are selectors in redux?

How to get something from the state / store inside a redux-saga function?

我认为我有不同的设置,因为我似乎无法从我的传奇中访问状态。

我尝试这样做:

const getList = store => store;
const getList = state=> state;

它们都返回未定义

我的商店看起来像这样...

export default function createStoreWithMiddleware() {
const sagaMiddleware = createSagaMiddleware();
const loggerMiddleware = createLogger();
const middleware = [sagaMiddleware, loggerMiddleware];
const persistedState = localStorage.getItem('reduxState') ? JSON.parse(localStorage.getItem('reduxState')) : {};

const store = createStore(reducer, persistedState, compose(
applyMiddleware(...middleware)
));

store.subscribe(() => {
localStorage.setItem('reduxState', JSON.stringify(store.getState()));
});

sagaMiddleware.run(rootSaga);

return store;
}

我想访问我在这个传奇中的列表:

function* selectTender(action) {
try {
const response = yield Api.getTenderById(action.payload);
yield put({type: 'SELECT_TENDER_SUCCEEDED', currentTender: response});
const list = yield select(getList);
yield put({type: 'FETCH_CHAPTERS', chaptersList: list, tenderId: response.id});
} catch (err) {
yield put({type: 'SELECT_TENDER_FAILED', message: err.message});
}
}

export function* watchSelectTender(){
yield takeEvery('SELECT_TENDER', selectTender);
}

但正如我所说,statestore 均未定义。

那么,我如何访问传奇中的商店(或状态)?

最佳答案

为此,您必须使用选择器。我举一个简单的例子。创建一个文件 selectors.js 并添加您想要从商店中选择的字段,如下所示。

export const username = (state) => state.user.name;

然后在您的传奇中,将选择器导入为,

import * as selectors from './selectors';

当您在传奇中需要用户名时,您可以简单地这样做,

import {select} from 'redux-saga/effects';
...
...
function *sampleSaga(params) {
const username = yield select(selectors.username);
}

sampleSaga 中的常量 username 现在将保存状态中的用户名值。

关于reactjs - redux saga 选择器,如何从 saga 访问状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43475888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com