React:将传入的服务数据传递给孩子

Posted

技术标签:

【中文标题】React:将传入的服务数据传递给孩子【英文标题】:React: Pass incoming service data to children 【发布时间】:2020-11-02 20:53:35 【问题描述】:

我正在开发一个连接到 websocket 并接收实时数据的 React 项目。目前我有一个 Websocket 组件来处理回调中的数据。我需要能够将这些传入数据传递给多个不同的子组件。我不确定最好的方法是什么。我试图坚持使用函数式组件,因为这似乎是 React 正在发展的方向。

这里有一些演示代码作为示例。

function Parent() 
    const handleData = function callback(data) 
        console.debug(data);
    ;

    return (
            <div className="container-main">
                <Websocket url='ws://localhost:8000/Service/' onMessage=handleData/>
                <Child />
            </div>
    );


export default Parent;

function Child() 
    return (
        <div>Websocket Message</div>
    );


export default Child;

您可以看到数据正在传入并由 handleData 回调处理。从那里我想用数据更新孩子中的 Websocket 消息。

我也可能以错误的方式思考这个问题。如果有更好的结构方式,我愿意接受建议。

【问题讨论】:

【参考方案1】:

您可以利用context 将您想要的任何值传递给所有孩子。它看起来像这样:

// Parent
function Parent() 
  return (
    <div className="container-main">
      <Websocket url='ws://localhost:8000/Service/'>
        <Child />
      </Websocket>
    </div>
  );


// Websocket
const WebsocketContext = React.createContext();

function Websocket(children) 
  const [websocketData, setWebsocketData] = useState();

  // websocket logic that sets and updates state that is passed to WebsocketContext

  return (
    <WebsocketContext.Provider value=setWebsocketData, websocketData>
      children
    </WebsocketContext.Provider>
  );


//Child
function Child() 
  const websocketData = useContext(WebsocketContext);
  return (
    <div>Websocket Message</div>
  );

这个组合非常好,允许任何/所有孩子根据需要订阅上下文。

【讨论】:

以上是关于React:将传入的服务数据传递给孩子的主要内容,如果未能解决你的问题,请参考以下文章

如何将设计数据传递给React组件?

Primeng - 对话服务将数据传递给对话组件

将数据传递给服务器显示未定义

如何将 props 数据传递给 compose()

jQuery $.ajax(),将成功数据传递给单独的函数

如何将数据传递给嵌套的子组件vue js?