我正在使用react-native
和socket.io
开发和redux-saga
应用。
使用this示例,
我创建了一个从套接字中收听消息的传奇
并发出一个动作。
现在我想知道如何写另一面,
收听dispatch
个活动,并emit
收听socket
在示例中,他仅为write
个事件使用了一条消息,因此它很简单。
我不希望我的代码看起来像这样:
yield fork(writeEvent1, socket)
yield fork(writeEvent2, socket)
yield fork(writeEvent3, socket)
...
function * writeEvent1 (socket) {
while (true) {
yield take(Actions.EVENT_1)
socket.emit('event-1')
}
}
function * writeEvent2 (socket{
...
}
如何以可读的方式管理此write
事件?
答案 0 :(得分:0)
如果我正确理解您的问题,您希望修改示例以使用比message
更多的事件名称。处理这取决于你的用例。如果你想为每条消息设置不同的事件名称,你可以修改write
saga,使其具有如下变量事件名称:
function* write(socket) {
while (true) {
const { eventName, payload } = yield take(SEND_MESSAGE);
socket.emit(eventName, payload);
}
}
...
yield put(sendMessage({eventName: 'foo', payload: { bar: 'baz'}}))
如果您有一个有限的事件名称列表,您仍然可以使用上面的示例,但可能使用某种const枚举,如:
const eventNames = {
FETCH_USER: 'fetch-user',
FETCH_ITEM: 'fetch-item',
FETCH_POST: 'fetch-post',
}
...
yield put(sendMessage({eventName: eventNames.FETCH_USER, payload: { id: 123 }}))
或者,如果您只想区分极少数类型的事件名称,那么有一个明确的写法传闻是有道理的:
function* write(socket) {
while (true) {
const { payload } = yield take(SEND_MESSAGE);
socket.emit('message', payload);
}
}
function* writeError(socket) {
while (true) {
const { payload } = yield take(SEND_ERROR);
socket.emit('error', payload);
}
}