【问题标题】:How can i access variable inside useEffect() hook如何访问 useEffect() 挂钩中的变量
【发布时间】:2020-12-28 20:50:13
【问题描述】:

我是新来的反应,并在使用效果挂钩内初始化了一个名为 socket 的变量。我试图在我的退货声明中访问它。但是我似乎无法访问它。我不知道该怎么做。提前致谢!

function SendSocketData(socket) {

  socket.emit("hello", "world");

}


function App() {


  useEffect(()=> {
    let socket = io("http://localhost:3001",
    );


  },[]);





  return (
    <div className="App">
      <button onClick={()=>SendSocketData(socket)}>Send Data </button>
    </div>
  );
}

export default App;

【问题讨论】:

  • 在 useState 变量中声明套接字,然后使用 useEffect 设置状态

标签: reactjs


【解决方案1】:

你首先需要用useState()将socket对象声明为变量:

import React, { useState, useEffect } from 'react';

const [socket, setSocket] = useState(null);

然后用useEffect()赋值:

  useEffect(()=> {
    setSocket(io("http://localhost:3001"));
  },[]);

【讨论】:

【解决方案2】:

进入:

    function App() {
        const socket = io("http://localhost:3001",
    );
    useEffect(()=> {}

或使用useState

    function App() {
        const [socket, setSocket ] = useState(null);

    );
    useEffect(()=> {
        setSocket(io("http://localhost:3001"));
    }
    

【讨论】:

    【解决方案3】:

    您可以尝试将套接字存储在可变状态。像这样的:

        import React, { useState, useEffect } from "react";
        import io from "socket.io-client";
        
        function App() {
          const [socket, setSocket] = useState();
        
          useEffect(() => {
            setSocket(io("http://localhost:3001"));
          }, []);
    
          function SendSocketData(socket) {
             socket.emit("hello", "world");
          }
        
          return (
              <div className="App">
                <button onClick={()=>SendSocketData(socket)}>Send Data </button>
              </div>
          );
        }
        
        export default App;
    

    【讨论】:

      【解决方案4】:

      您可以在组件外部定义变量或在 then 函数内部声明它,然后在 useEffect 内部为其赋值。

      function SendSocketData(socket) {
      
        socket.emit("hello", "world");
      
      }
      
      let socket;
      
      function App() {
      
        useEffect(()=> {
          socket = io("http://localhost:3001",)
        }, []);
      
        return (
          <div className="App">
            <button onClick={()=>SendSocketData(socket)}>Send Data </button>
          </div>
        );
      }
      
      export default App;
      

      function App() {
        let socket;
      
        useEffect(()=> {
          socket = io("http://localhost:3001",)
        }, []);
      
        return (
          <div className="App">
            <button onClick={()=>SendSocketData(socket)}>Send Data </button>
          </div>
        );
      }
      

      【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 2021-06-21
      • 2021-02-13
      • 2020-08-10
      • 2021-04-23
      • 2013-06-26
      • 2019-12-06
      • 1970-01-01
      相关资源
      最近更新 更多