如何将 JS 代码放入 React 组件中

Posted

技术标签:

【中文标题】如何将 JS 代码放入 React 组件中【英文标题】:How to put JS code inside React component 【发布时间】:2020-06-23 04:00:33 【问题描述】:

我有一个 React 组件和我想放入其中的 JS 代码。我试过了,但完全搞砸了。有人知道怎么做吗?

我的组件.js

 import React from "react";
    import Navbar from "./Navbar";

    const Chat = props => (
      <div>
              //Place for my Js code
      </div>
    );

    export default Chat;

javascript 代码

<script src="/socket.io/socket.io.js"></script>
      <script>
        var socket = io();

        socket.on('message', function(msg)
          console.log(msg);
          document.getElementById("message").innerhtml = msg;
        );
      </script>

【问题讨论】:

【参考方案1】:

您可以将代码包装在 useEffect 挂钩中。它会在组件安装后触发。

您必须从npm 安装sockito.io。运行>npm i socket.io-client

还添加了一些改进。

import React,  useEffect, useRef  from "react";
import io from "socket.io-client";
const Chat = props => 
    const socket = useRef(null);
    useEffect(() => 
        connectToSocket();
        return () => 
            if (socket.current) 
                socket.current.disconnect()
            
        
    , []);
    function connectToSocket() 
        console.log("Conneting to socket");
        socket.current = io('http://localhost:5000');
        socket.current.on('connect', () => console.log("Connected"));
        socket.current.on('disconnect', () => connectToSocket());
        socket.current.on('message', function (msg) 
            console.log(msg);
            document.getElementById("message").innerHTML = msg;
        );
    
    return (<div>
        Some data
        <div id="message"></div>
    </div>)

export default Chat;

【讨论】:

效果只需要运行一次(是socket设置代码)。所以依赖数组应该设置为[]。否则,此代码将在每次渲染上运行。 @Sohail 谢谢。还有怎么样,这个链接应该在哪里? @Sohail 好吧,我使用了你的代码,运行了服务器,但我在控制台中收到了这些错误:“无法加载资源:net::ERR_NAME_NOT_RESOLVED”和“polling-xhr.js: 267 GET http://%3Csocket%20url%3E/socket.io/?EIO=3&transport=polling&t=N38iOwA net::ERR_NAME_NOT_RESOLVED" @Sohail used var socket = io('localhost:3000');我不知道我应该在这里使用哪个 URL。我不断收到错误:polling-xhr.js:267 POST localhost:3000/socket.io/… 404 (Not Found) 让我们continue this discussion in chat.【参考方案2】:

你应该从 npm 导入 socket.io 而不是在 React 中使用脚本标签。并添加代码像

import io from "socket.io";

const Chat = props => 
  React.useEffect(() => 
    let socket = io();

    socket.on('message', function(msg) 
      console.log(msg);
      document.getElementById('message').innerHTML = msg;
    );
  , []);

  return <div></div>;
;

【讨论】:

以上是关于如何将 JS 代码放入 React 组件中的主要内容,如果未能解决你的问题,请参考以下文章

在 React.js 的父组件中使用 react-router 时,如何使用 react context API 将数据从父组件传递到子组件?

react.js从入门到精通——组件之间的数据传递

在js代码中怎样用react 加载组件

如何在 div (React.JS) 中垂直堆叠组件?

如何添加 1 个 React 组件的 JS 状态变量以用于其他组件?

如何在 React.js 的另一个组件中更新组件状态变量的值?