我的React组件:
import React, { PropTypes, Component } from 'react'
class Content extends Component {
handleClick(e) {
console.log("Hellooww world")
}
render() {
return (
<div className="body-content">
<div className="add-media" onClick={this.handleClick.bind(this)}>
<i className="plus icon"></i>
<input type="file" id="file" style={{display: "none"}}/>
</div>
</div>
)
}
}
export default Content
在这里,当我点击一个带有图标的div时,我想打开一个<input>
文件,其中显示了选择照片的选项。选择照片后,我想获得选择照片的值。我如何在react中做到这一点?
9条答案
按热度按时间qcbq4gxm1#
使用React Hooks上载新答案
首先,创建Input ref钩子。
然后创建您的函数来处理打开的文件,该函数应该位于您正在使用 useRef Hook 的同一个函数内
然后将函数设置为Button元素:
HTML输入文件的API
mqkwyuun2#
除了把输入放到视图中,你还需要处理输入内容的变化,实现onChange,获取打开的文件信息,如下所示:
控制台将输出:
现在您可以随心所欲地使用它。但是,如果您要上传它,则必须从以下内容开始:
ogq8wdun3#
将ref属性添加到输入中:
更改handleClick函数:
由于您使用的是ES6,因此需要将其绑定到handleClick函数,我们可以在构造函数中完成此操作:
4c8rllxm4#
React 16.3使用React.createRef()方法提供了更好的方法https://reactjs.org/blog/2018/03/29/react-v-16-3.html#createref-api
typescript 示例:
sirbozc55#
所有建议的答案都很棒。我超越了,允许用户添加图像并立即预览。我使用了React钩子。
谢谢大家的支持
结果应如下所示
我的CSS
tzxcd3kk6#
您可以将它 Package 在标签中,当您单击标签时,它会单击对话框。
6qftjkof7#
我使用next.js
时使用的唯一代码
6tqwzwtp8#
我最近想用材质UI实现一个类似的特性,这种方法类似于@Niyongabo的实现,除了我使用材质UI框架和利用头像/徽章组件。
我也会在使用图像之前调整其大小。
2ledvvac9#
如果你可以使用钩子,这个包可以解决你的问题,而不需要创建输入元素。这个包不呈现任何html输入元素。你可以简单地在div元素上添加OnClick。
以下是工作演示:https://codesandbox.io/s/admiring-hellman-g7p91?file=/src/App.js
调用openFileSelector()将打开浏览器文件选择器。
文件属性:
https://www.npmjs.com/package/use-file-picker
我创建这个包来解决同样的问题。