首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Material UI:使用ButtonBase上传文件

Material UI:使用ButtonBase上传文件
EN

Stack Overflow用户
提问于 2018-09-23 21:16:59
回答 2查看 15.3K关注 0票数 0

在材料UI文档中,他们展示了如何通过隐藏输入文件并在标签中添加button组件来创建"Upload“按钮。(请参阅:https://material-ui.com/demos/buttons/)

现在,我想要一个不同的按钮,所以我正在使用ButtonBase,但它不工作-文件选择弹出窗口不显示。我不确定我是否遗漏了什么,也许我遗漏了一些参数来传递它?

代码语言:javascript
复制
<input
    accept="image/*"
    className="d-none"
    id="image-upload"
    type="file"
  />
  <label htmlFor="image-upload"
    className="d-block" >
    <Button component="span">
      Upload
    </Button> {/* working */}
    <ButtonBase>
      test
    </ButtonBase>  {/* not working*/}
 </label>

ButtonBase接口:https://material-ui.com/api/button-base/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-23 21:48:03

首先,您运行的是什么版本?Material-UI是一个非常快速的项目,因此您需要确保您正在检查文档,无论您使用的是哪种版本。

我喜欢使用显式事件(在本例中为ref),这在3.1.0下适用

代码语言:javascript
复制
<input 
  ref={'file-upload'}
  type='file'
/>
<ButtonBase
  onClick={e => {
    this.refs['file-upload'].click()
  }}
>
  <div style={{
    color: 'red',
    backgroundColor: 'yellow',
    border: '1px solid green',
  }}
  >
    Upload!
  </div>
</ButtonBase>
<hr />
<Button
  type='file'
  onClick={e => {
    this.refs['file-upload'].click()
  }}
>
  File Upload Material
</Button>

我在我的一个项目中使用了类似的东西,我只是隐藏了<input type='file' />元素。

票数 3
EN

Stack Overflow用户

发布于 2019-06-18 15:02:38

同样可以用钩子来实现

代码语言:javascript
复制
export default function myForm(props) { 
 const inputEl = React.useRef(null);
  const onButtonClick = () => {
    console.log("inside")
    // `current` points to the mounted file input element
    inputEl.current.click();
  };

  return (
    <React.Fragment>
        Upload Photos
          <br/>
          <input
        accept="image/*"
        className={classes.input}
        id="outlined-button-file"
        multiple
        type="file"
        ref={inputEl}
      />
      <label htmlFor="outlined-button-file">

        <ButtonBases
        onClick={()=>onButtonClick()}
        />
      </label>
    </React.Fragment>
)}

别忘了在ButtonBasses组件中调用onClick。

代码语言:javascript
复制
export default function ButtonBases(props) {
  const classes = useStyles();

  return (
    <div className={classes.root}>
       <ButtonBase
          ...
          onClick={props.onClick}
        >
          ....
        </ButtonBase>
      ))}
    </div>
  );
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52466451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档