gpt4 book ai didi

redux-saga - 在普通函数/事件 channel 中使用选择效果

转载 作者:行者123 更新时间:2023-12-03 17:27:54 35 4
gpt4 key购买 nike

我正在使用 redux sagas 事件 channel 。我有一个特定的用例,我想在事件被触发时获取存储状态,因为 eventChannel 不是生成器函数,我无法使用 redux sagas 的选择效果。任何其他方式来实现这一目标?

我也曾尝试导入 store 并使用 store.getState()但由于在商店初始化之前导入了 saga 文件,我变得未定义。

function subscribe(socket) {
return eventChannel(emit => {
socket.subscribe(listenerTopic, {qos: 1});
socket.on('reconnection', () => {
// i need to fetch latest unread message, for that i need to get timestamp
// for last message received which is in store so the command will be to
// send sinceDate i.e last message timestamp and untilDate that is currentDate
})
}

最佳答案

一种可能的解决方案是使用 redux-saga channel 功能。
这个想法是每次发生套接字事件时将事件推送到 channel 中。同时,您还有另一个 saga 监听 channel 上的事件并做出相应的 react 。因为听音部分是saga,你可以使用常见的saga效果,比如select .

您的代码可能如下所示:

import { channel } from 'redux-saga'
import { select } from 'redux-saga/effects'

const socketChannel = channel()

function subscribe(socket) {
return eventChannel(emit => {
socket.on('reconnection', () => {
socketChannel.put({ type: RECONNECTION })
})
})
}

export function* watchSocketChannel() {
while (true) {
const action = yield take(socketChannel)

if (action.type === RECONNECTION) {
const lastMessageTimestamp = yield select(selectors.getLastMessageTimestamp)
...
}
}
}

我希望这能帮到您。

关于redux-saga - 在普通函数/事件 channel 中使用选择效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43236439/

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