Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在我的React JS应用程序中显示常规javascript?

如何在我的React JS应用程序中显示常规javascript?
EN

Stack Overflow用户
提问于 2019-11-29 21:00:30
回答 1查看 89关注 0票数 0

我正在尝试允许用户使用常规javascript中的输入和FileReader()将歌曲下载到音频播放列表中,但没有显示任何内容。我已经用普通的Javascript完成了我的大部分代码,我觉得很难把它转换成所有的ReactJS代码。

代码语言:javascript
运行
AI代码解释
复制
import React from 'react';
import {
  Link
} from 'react-router-dom';
import $ from "jquery";


var Download = (props) => {
    function other() {
      console.log("It's working");
      var input = document.createElement("INPUT");
      input.id = "upload-file";
      input.type = "file";
      input.multiple = true;

      var cloneInput = input.cloneNode(true);
      cloneInput.id = "cloneInput";

      var destinationDiv = document.createElement("div");
      destinationDiv.id = "destination";
      var destination = document.getElementById('destination');
      destinationDiv.innerHTML = "destination";

      var appendInput = document.body.appendChild(input);
      if (appendInput) {
        console.log("yay");
      }

      document.body.appendChild(destinationDiv);
      var inputId = document.getElementById('upload-file');
      if (inputId) {
        inputId.addEventListener('change', function() {
          var file;

          var destination = document.getElementById('destination');
          var audioAlreadyUsed = true;
          var ulAlreadyAdded = true;
          var alreadyUsed = true;
          // Looping in case they uploaded multiple files
          for (var x = 0, xlen = this.files.length; x < xlen; x++) {
            let a = document.createElement('a');
            file = this.files[x];
            a.innerHTML = file.name;
            console.log(file.name);
            if (file.type.indexOf('audio/mp3') != -1) { // Very primitive "validation"
              var reader = new FileReader();
              reader.onload = function(e) {
                var ul = document.createElement("UL");
                ul.id = "playlist";
                var audio = document.createElement("AUDIO");
                audio.id = "audio";
                // audio.src = e.target.result;
                audio.controls = true;
                audio.preload = "none";
                if (audioAlreadyUsed) {
                  destination.appendChild(audio);
                  audioAlreadyUsed = false;
                }
                if (ulAlreadyAdded) {
                  destination.appendChild(ul);
                  ulAlreadyAdded = false;
                }
                var li = document.createElement("LI");
                li.class = "active";
                li.id = "liID";
                var clone = li.cloneNode(true);
                document.getElementById("playlist").appendChild(clone);
                a.href = e.target.result;
                clone.appendChild(a);
                //PLAYLIST CODE
                var audio;
                var playlist;
                var tracks;
                var current;
                var len;
                var link;
                var par;

                init();

                function init() {
                  current = 0;
                  audio = $('audio');
                  playlist = $('#playlist');
                  tracks = playlist.find('li a');
                  len = tracks.length - 1;
                  audio[0].volume = .10;
                  // audio[0].play();

                  playlist.find('a').click(function(e) {
                    e.preventDefault();
                    link = $(this);
                    current = link.parent().index();
                    run(link, audio[0]);
                  });
                  audio[0].addEventListener('ended', function(e) {
                    current++;
                    if (current == len) {
                      current = 0;
                      link = playlist.find('a')[0];
                    } else {
                      link = playlist.find('a')[current];
                    }
                    run($(link), audio[0]);
                  });
                }

                function run(link, player) {
                  player.src = link.attr('href');
                  par = link.parent();
                  par.addClass('active').siblings().removeClass('active');
                  audio[0].load();

                  // Show loading animation.
                  var playPromise = audio[0].play();

                  if (playPromise !== undefined) {
                    playPromise.then(_ => {
                        // Automatic playback started!
                        // Show playing UI.
                        // We can now safely pause video...
                        audio.pause();
                      })
                      .catch(error => {
                        // Auto-play was prevented
                        // Show paused UI.
                      });
                  }
                };
              };
              reader.readAsDataURL(file);
            };
          }
        });
      };
    };
    return ( < div > {
        other()
      } < /div>)
    };
    export default Download;

我已经被这个问题困扰了很长一段时间了。我的代码在控制台中运行,但页面上没有显示任何内容。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-29 21:48:23

尽管这个问题的主体似乎偏离了标题,但我将在标题中解决这个问题:如何将javascript文件导入到我的react组件中?

答案很简单。我选择将目录结构设置为:

  1. ./dummyDir
  2. ./dummyDir/react-src/
  3. ./dummyDir/react-src/src

这一切都可以在reactjs.org中看到。然后,所有特定于react/javascript的代码都将放入.../src/中。因此,您将拥有./dummyDir/react-src/src/myJSFile.js

还有两个步骤。下一步是确保将javascript和任何类(假设您做了一些oop操作) import.jsx文件中。现在,您可以直接在react组件中调用旧的javascript文件中的任何方法。

最后一步是托管和部署。我不会像在本地环境中那样去托管。例如,我在本地机器上使用apachectl测试主机。如果你是这种情况,你可能会因为不从npm run serve托管而挂起,因为看起来你正在尝试插入react而不是从react开始。

因此,您需要一个包含以下内容的bash脚本:

代码语言:javascript
运行
AI代码解释
复制
deploy () {
  if [ ! -d build/ ]
  then
    echo -e "ERROR:\n\tDoes not appear to be correct directory;"
    echo -e "\tDir /build/ not found;"
    return 1
  fi  
  echo -e "STARTING:"

  # Testing if build failed...
  npm run build
  if [ ! $? -eq 0 ] ; 
    then
      printf "\nnpm run build has failed...\n"
      printf "\npreserving previous ./build/\n"
      return 2
  fi  

  if [ -d ../static/ ]
  then
    echo -e "\tREMOVING ../static/*"
    rm -r ./../static/ || echo "\tWARNING: DID NOT REMOVE DIR"
  else
    echo -e "\tDID NOT FIND ../static/ FOR REMOVAL"
  fi  

  # Redirecting the ls output to make it completely silent
  if ls ../precache-manifest* 1> /dev/null 2>&1;
  then
    echo -e "\tREMOVING ../precach*"
    rm -r ./../precache-manifest*  || echo "\tWARNING: DID NOT REMOVE CACHE"
  else
    echo -e "\tDID NOT FIND ../static/ FOR REMOVAL"
  fi  

  echo -e "\tRUNNING: npm run build"

  echo -e "\tCOPYING OVER NEW BUILD DIR"
  cp -r build/* ../ 

  echo -e "DONE"
  return 0  #Bash is weird; 0 is true, 1 is false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59110919

复制
相关文章
Solid.js 就是我理想中的 React
我大约在三年前开始在工作中使用 React。巧合的是,当时正好是 React Hooks 出来的时候。我当时的项目代码库有很多类组件,总让我觉得很笨重。
深度学习与Python
2022/04/19
2K0
Solid.js 就是我理想中的 React
如何在 JavaScript 中构建命令行应用程序
要使用 Commander.js 库,您必须安装 Node.js。在 Linux 上,您可以使用包管理器安装 Node。例如,在 Fedora、CentOS、Mageia 等上:
KINGLIFE
2021/11/11
2.2K0
如何在 React 中实现鼠标悬停显示文本?
在 React 应用中,当用户将鼠标悬停在某个元素上时,我们经常需要显示一些相关的文本,以提供额外的信息或交互提示。本文将详细介绍如何在 React 中实现鼠标悬停显示文本的功能,并提供示例代码帮助你理解和应用这个功能。
网络技术联盟站
2023/06/07
3.5K0
JavaScript的数组常规操作
在JavaScript中,数组必须使用数字索引,对象可以使用命名索引。 数组是特殊类型的对象,具有特有的一些属性和方法。
青梅煮码
2023/01/31
1.5K0
React 中必会的 10 个概念
您可能知道,定义React组件的最简单方法是编写 JavaScript 函数,如以下示例所示。
前端老王
2020/07/08
6.7K0
Flutter 应用程序中显示应用程序通知
要使用 Overlay 功能,我们必须将 Material 应用程序包装在OverlaySupport小部件中。
徐建国
2021/11/30
1.8K0
Flutter 应用程序中显示应用程序通知
react中常规删除功能
// let message = ( <div><p > 商机删除后列表将不可见此商机, 请谨慎操作! </p> </div>);
botkenni
2020/02/11
6160
如何在VimVi中显示行号
Vim/Vi是许多软件开发人员和Linux系统管理员首选的文本编辑器。 默认情况下,Vim不显示行号,但可以轻松打开它们。Vim支持三种行编号模式,可帮助你浏览文件。除了标准的绝对行编号之外,Vim还支持相对行和混合行编号模式。 绝对行号 绝对行号是标准行号,它在每行文本旁边显示适当的行号。 要激活行编号,请设置数字标志: 按Esc键切换到命令模式。 按:(冒号),光标将移动到屏幕的左下角。输入set number或set nu,然后按Enter。 :set number 行号将显示在屏幕的左侧: 要禁用
入门笔记
2022/06/02
3.7K0
ReactJS和React-Native的主要区别在哪里
React-Native已经存在了约2年,而且因为它能被Android使用让我们构建跨平台的移动app而成为真正有趣的框架。一些开发者还为构建适用于Mac和Windows的桌面应用程序量身打造了一些框架,这简直太酷了。
疯狂的技术宅
2019/03/27
17.2K0
ReactJS和React-Native的主要区别在哪里
如何在 React 中优雅的写 CSS
看目录结构清晰明了,由于“ CSS 文件分离 != CSS 作用域隔离”这样的机制,如果我们不通过一些工具或规范来解决 CSS 的作用域污染问题,会产生非预期的页面样式渲染结果。
政采云前端团队
2019/12/20
4.1K0
如何在 React 中优雅的写 CSS
如何在 React 中引入 less?
本文主要写如何在 React 中引入 less 。因为 less 和 css 非常像,因此很容易学习。而且 less 仅对 css 语言增加了少许方便的扩展,这就是 less 如此易学的原因之一。
子舒
2022/06/09
3.9K0
react组件用法深度分析
React 组件也一样, 它的输入是 props,输出是关于 UI 的描述。我们可以在多个 UI 中重用单个组件,组件也可以包含其他组件。React 组件的本质上就是一个普通的 JavaScript 函数。
xiaofeng123aa
2022/12/12
5.5K0
使用 Format.js 来翻译 React 应用程序
在React应用程序中,我们可以使用Format.js来轻松地实现本地化。Format.js是一个JavaScript国际化库,它提供了国际化和本地化的各种功能。
掘金安东尼
2023/04/22
8080
react组件深度解读
React 组件也一样, 它的输入是 props,输出是关于 UI 的描述。我们可以在多个 UI 中重用单个组件,组件也可以包含其他组件。React 组件的本质上就是一个普通的 JavaScript 函数。
xiaofeng123aa
2022/09/26
5.6K0
React篇(020)-如何在 React 中创建组件?
答案:有两种可行的方法来创建一个组件: 1. Function Components: 这是创建组件最简单的方式。这些是纯 JavaScript 函数,接受 props 对象作为第一个参数并返回 React 元素:
齐丶先丶森
2022/05/12
3K0
如何在React中写出更好的代码
在React中编写更好的代码的提示,关于Linting、propTypes、PureComponent和其他几个点,帮你编写更好的代码。
用户6835371
2021/09/03
2.6K0
如何在React中写出更好的代码
如何在React中优雅的处理doubleClick
上午楼主遇到一个需要处理双击事件的需求,在这里介绍下如何在触发doubleCLick时间的时候, 不触发click事件的解决办法, 顺便分享给大家。
皮小蛋
2020/03/02
8.1K2
React Server Components手把手教学
在上一篇介绍React 18 如何提升应用性能文章中提到了很多关于React性能优化的方式,例如(Suspence),从底层实现的角度来看,都是基于React Server Component(简称RSC)来做文章.
前端柒八九
2023/09/10
9110
React Server Components手把手教学
技巧|高效使用 JavaScript 闭包——避免 Node.js 应用程序中的内存泄漏
在 Node.js 中,广泛采用不同形式的闭包来支持 Node 的异步和事件驱动编程模型。通过很好地理解闭包,您可以确保所开发应用程序的功能正确性、稳定性和可伸缩性。
疯狂的技术宅
2019/03/28
2K0
技巧|高效使用 JavaScript 闭包——避免 Node.js 应用程序中的内存泄漏
点击加载更多

相似问题

如何在React.js中显示Javascript对象?

229

如何在react本机中使用javascript库,如moment.js

50

如何在App.Js文件中显示我的react App.Js?

13

如何在我的Android应用程序中显示用户的“常规同步设置”屏幕?

11

如何在laravel和react应用程序中包含非react js javascript库?

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档