码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • React技巧之打开文件输入框


    原文链接:https://bobbyhadz.com/blog/react-open-file-input-on-button-click

    作者:Borislav Hadzhiev

    正文从这开始~

    总览

    在React中,通过点击按钮,打开文件输入框:

    1. 在button元素上设置onClick属性。
    2. 在文件输入框上设置ref属性。
    3. 当按钮被点击时,打开文件输入框。比如说,inputRef.current.click() 。
    import {useRef} from 'react';
    
    const App = () => {
      const inputRef = useRef(null);
    
      const handleClick = () => {
        // 👇️ open file input box on click of other element
        inputRef.current.click();
      };
    
      const handleFileChange = event => {
        const fileObj = event.target.files && event.target.files[0];
        if (!fileObj) {
          return;
        }
    
        console.log('fileObj is', fileObj);
    
        // 👇️ reset file input
        event.target.value = null;
    
        // 👇️ is now empty
        console.log(event.target.files);
    
        // 👇️ can still access file object here
        console.log(fileObj);
        console.log(fileObj.name);
      };
    
      return (
        <div>
          <input
            style={{display: 'none'}}
            ref={inputRef}
            type="file"
            onChange={handleFileChange}
          />
    
          <button onClick={handleClick}>Open file upload box</button>
        </div>
      );
    };
    
    export default App;
    

    open-file-input-on-button-click.gif

    click

    我们使用useRef钩子访问文件input元素。需要注意的是,我们必须访问ref对象上的current属性,以获得对我们设置ref属性的文件input元素的访问。

    当我们将ref属性传递到元素上时,比如说,<input type="file" ref={myRef} /> 。React将ref对象的.current属性设置为相应的DOM节点。

    我们调用了click()方法,比如:ref.current.click() 。以此来模拟input元素上的鼠标点击事件。

    当对一个元素使用click()方法时,它会触发该元素的点击事件。当一个文件input的点击事件被触发时,文件上传对话框就会打开。

    需要注意的是,我们对input元素的display属性设置为none,来隐藏该元素。

    现在,当用户点击button元素时,我们在input元素上使用ref对象来模拟click事件,并且文件上传对话框会被打开。

    总结

    该方法可以在任何类型元素上生效,比如说div或者一个图标。只需在元素上设置onClick属性,当元素被点击时,就可以文件input上模拟点击。

  • 相关阅读:
    NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
    gdb调试技巧
    C语言实例练习
    Elasticsearch:调整搜索速度
    总结下.NET后端已经熟悉或者使用过了这么多东西,有没你喜欢用的
    Javase --- 多线程复习
    SSM+Mysql实现的共享单车管理系统(功能包含分角色,登录、用户管理、服务点管理、单车管理、分类管理、学生信息管理、单车租赁、信息统计、系统设置等)
    js监听页面或元素scroll事件,滚动到底部或顶部
    AI绘画新境界:如何利用智能工具打造未来艺术
    实时应用程序的 CoreData+CloudKit 集成
  • 原文地址:https://www.cnblogs.com/chuckQu/p/16414452.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号