【问题标题】:How to pass data to client using React redux and socket.io?如何使用 React redux 和 socket.io 将数据传递给客户端?
【发布时间】:2021-02-10 13:01:03
【问题描述】:

直到此刻我才熟悉 socket.io 或其他服务器的东西,所以也许我正在为非常简单的事情而苦苦挣扎。

这是 server.js:

let socket = null;

export const connect = (stockSymbol) => {
    socket = io('http://localhost:4000');

socket.on('connect', () => {
    console.log('connected');

    socket.on(stockSymbol, (data) => {
        tickData(data);
    });

    socket.emit('ticker', stockSymbol);
});

socket.on('disconnect', () => {
    console.log('disconnected');
});
};

这是行动:

export const TICK_DATA = 'TICK_DATA_ACTION';
export const tickData = data => {
    console.log(data, 'works here');
    return dispatch => {
        console.log(data, 'but doesnt work here');
        dispatch({ type: TICK_DATA, payload: data });
    };
};

问题是触发了动作,但调度功能不起作用。我认为绑定调度对象存在一些问题,但我不知道如何将它正确地实现到服务器文件。 请分享您的想法。

【问题讨论】:

    标签: reactjs redux socket.io react-redux redux-thunk


    【解决方案1】:

    尝试将 dispatch 函数作为参数从您正在调用连接函数的反应组件传递并执行 dispatch(tickData(data));

    let socket = null;
    
    export const connect = (dispatch,stockSymbol) => {
    socket = io('http://localhost:4000');
    
    socket.on('connect', () => {
    console.log('connected');
    
    socket.on(stockSymbol, (data) => {
        dispatch(tickData(data));
    });
    
    socket.emit('ticker', stockSymbol);
    });
    
    socket.on('disconnect', () => {
    console.log('disconnected');
    });
    };
    

    【讨论】:

    • 但是数据不是从组件传递的,而是从 service.js 传递的
    • 了解,但我建议您在应用程序开始时从反应组件或操作调用 connect() 以避免复杂性,否则,您将无法访问调度,因为它是react-redux,您可以尝试在安装组件时将调度保存在窗口变量中,但我不完全确定它会起作用。
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 2012-09-10
    • 2021-12-26
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2013-12-31
    相关资源
    最近更新 更多