Redux呼叫从Socketio事件调度

问题描述 投票:1回答:1

当我收到socket.io事件时,我正试图在我的操作中调用一个调度。

AppActions.js:

export const _ioDispatch = (data) => (dispatch, getState ) => {
  console.log("_ioDispatch")
  dispatch(data);
}

socket.on('item created', function(payload){
  console.log("socket on item created")
  _ioDispatch(payload);
});

我得到控制台日志“创建项目的套接字”,但控制台日志“_ioDispatch”和调度永远不会被调用。任何建议将不胜感激。 TIA

javascript redux socket.io
1个回答
0
投票

我不知道你的实现,但我会假设你有一些连接你的套接字的React组件。你需要的是派遣_ioDispatch(有效载荷),以便它到达reduxredux-thunk(或你使用的任何一个)中间件。像这样的东西:

import React from 'react';
import { connect } from 'react-redux';

class MyComponent extends React.component {
    constructor(props) {
        //create socket and do stuff here..
        socket.on('item created', function(payload){
            console.log("socket on item created")
            props.socketCallback(payload);
        });
    }
}

const mapDispatchToProps = (dispatch) => ({
   socketCallback: (payload) => dispatch(_ioDispatch(payload))
});

export default connect(null, mapDispatchToProps)(MyComponent);

顺便说一句,如果您的_ioDispatch函数与您描述的一样:

export const _ioDispatch = (data) => (dispatch, getState ) => {
    console.log("_ioDispatch")
    dispatch(data);
}

然后你可以简单地删除它并将mapDispatchToProps更改为:

const mapDispatchToProps = (dispatch) => ({
   socketCallback: (payload) => dispatch(payload)
});
© www.soinside.com 2019 - 2024. All rights reserved.