#redux-saga
Вопрос:
У меня есть реквизит, который является частью основного приложения. Я попытался передать его в качестве параметра отправки, но reactjs/toolkit
пожаловался на это A non-serializable value was detected in the state
.
(Я думаю, потому что prop-это экземпляр класса).
Как я могу использовать эту опору внутри саги?
Для визуализации это то, что мне нужно использовать:
Мне нужно иметь возможность использовать ту ual
опору , которая находится внутри App
, когда пользователь нажимает кнопку где-то в Header
.
rootStore.js (не весь код)
const setupStore = () => {
const store = configureStore({
reducer,
middleware,
});
startSaga();
return store;
};
export default setupStore;
rootSaga.js
import { all,fork } from 'redux-saga/effects';
import createSagaMiddleware from 'redux-saga';
import userSaga from './userSaga';
function* rootSaga() {
console.log("hi saga")
yield all([
fork(userSaga),
]);
}
const sagaMiddleware = createSagaMiddleware();
export const startSaga = () => {
sagaMiddleware.run(rootSaga);
};
export default sagaMiddleware;
userSaga.js
export function* handleUserLogin() {
console.log('saga handleUserLogin')
// <=== need to use `ual` here
}
export default function* watchUserLogin() {
yield takeEvery(fetchLoginRequest.type, handleUserLogin);
}
Header.js (соответствующие части):
import { fetchLoginRequest } from '../reducers/userReducer';
const Header = (props) => {
const {
fetchLoginRequest,
} = props;
const handleLogin = () => {
fetchLoginRequest()
}
}
const mapDispatchToProps = {
fetchLoginRequest,
};
export default connect(mapStateToProps,mapDispatchToProps)(Header);
Сага работает, я вижу saga handleUserLogin
консоль devtools
Комментарии:
1. Есть ли
ual
в вашем приложении только один экземпляр объекта? Если да, то не могли бы вы просто передать его в корневую систему для использованияsagaMiddleware.run(rootSaga, ual);
? Затем вы можете либо передать его во вложенные саги, либо использоватьsetContext/getContext
, чтобы легко получить его значение в любой вложенной саге, не передавая его на каждом уровне.2. Да, есть только один пример
ual
. Как перейтиual
отApp
кrootSaga
?3. Как и где вы создаете
ual
экземпляр? В компоненте приложения? В файле, который отображает корневой каталог вашего приложения? Точка входа вашего приложения и его импорт, скорее всего, выполняют множество загрузочных функций для настройки вашего приложения, таких как создание хранилища redux и корня рендеринга вашего приложения, поэтому вам нужно создатьual
экземпляр где-нибудь, где вы сможете затем передать его как в качестве реквизита в свой файл ReactDOM.render, так и в файл rootSaga.