redux-saga - 具有 1 个异步依赖于另一个的服务器端渲染
redux-saga - Server-Side rendering with 1 async dependent on another
我正在尝试通过 END 效果让我的应用程序在服务器端呈现(https://github.com/redux-saga/redux-saga/issues/255 上的详细信息,并解释了为什么这如此棘手)。
我的数据依赖于 2 个异步请求:getJwtToken -> (with token data) FetchItem -> now render
.
这可能吗?
我花了很多时间查看频道(此处 https://redux-saga.js.org/docs/advanced/Channels.html),但无法获得任何变化。
我的 Saga 看起来像这样(LOAD_USER_PAGE 最初被解雇)
function* loadUserPage() {
yield put({type: 'JWT_REQUEST'})
const { response } = yield call(fetchJwtToken)
if (response) {
yield put({type: 'JWT_REQUEST_SUCCESS', payload: response})
}
}
function* fetchItem() {
console.log('NEVER GETS HERE')
}
function* watchLoadPage() {
yield takeLatest('LOAD_USER_PAGE', loadUserPage);
}
function* watchFetchItem() {
yield takeLatest('JWT_REQUEST_SUCCESS', fetchItem);
}
export default function* rootSaga() {
yield all([
fork(watchLoadPage)
fork(watchFetchItem)
])
}
我相信我明白为什么它不起作用(由于 END 事件触发仅终止那些已经开始的效果,并且由于我的第二个效果在我的第一个效果回来之前不会被触发,所以它不包含在 runSaga().done
承诺。
By 不起作用我的意思是操作 JWT_REQUEST_SUCCESS
被触发并且 runSaga.done
承诺运行。但是我在 console.log 中的消息没有被触发。
我认为将两个请求都放在同一个函数中是可能的,但我正在尝试抽象出令牌授权部分。
怎么都不可能吗?
真的卡住了。
编辑:
解决方案是按照 https://github.com/redux-saga/redux-saga/issues/255#issuecomment-323747994 and https://github.com/redux-saga/redux-saga/issues/255#issuecomment-334231073.
评论中的建议使用频道
所有人的SSR :)
我正在尝试通过 END 效果让我的应用程序在服务器端呈现(https://github.com/redux-saga/redux-saga/issues/255 上的详细信息,并解释了为什么这如此棘手)。
我的数据依赖于 2 个异步请求:getJwtToken -> (with token data) FetchItem -> now render
.
这可能吗?
我花了很多时间查看频道(此处 https://redux-saga.js.org/docs/advanced/Channels.html),但无法获得任何变化。
我的 Saga 看起来像这样(LOAD_USER_PAGE 最初被解雇)
function* loadUserPage() {
yield put({type: 'JWT_REQUEST'})
const { response } = yield call(fetchJwtToken)
if (response) {
yield put({type: 'JWT_REQUEST_SUCCESS', payload: response})
}
}
function* fetchItem() {
console.log('NEVER GETS HERE')
}
function* watchLoadPage() {
yield takeLatest('LOAD_USER_PAGE', loadUserPage);
}
function* watchFetchItem() {
yield takeLatest('JWT_REQUEST_SUCCESS', fetchItem);
}
export default function* rootSaga() {
yield all([
fork(watchLoadPage)
fork(watchFetchItem)
])
}
我相信我明白为什么它不起作用(由于 END 事件触发仅终止那些已经开始的效果,并且由于我的第二个效果在我的第一个效果回来之前不会被触发,所以它不包含在 runSaga().done
承诺。
By 不起作用我的意思是操作 JWT_REQUEST_SUCCESS
被触发并且 runSaga.done
承诺运行。但是我在 console.log 中的消息没有被触发。
我认为将两个请求都放在同一个函数中是可能的,但我正在尝试抽象出令牌授权部分。
怎么都不可能吗?
真的卡住了。
编辑: 解决方案是按照 https://github.com/redux-saga/redux-saga/issues/255#issuecomment-323747994 and https://github.com/redux-saga/redux-saga/issues/255#issuecomment-334231073.
评论中的建议使用频道所有人的SSR :)