我正在尝试创建一个背景图像更新器/上传器组件。
但是,如果用户想要更新背景图像,则默认情况下会设置一个图像,而我想更新状态并存储该图像。
到目前为止的研究表明,我需要使用<input type="file" />
元素启用上载对话框。
有没有不使用输入元素的另一种方法?如果用户要单击<button>
元素以显示对话框,然后更新背景图像。
export default class ChangeBackground extends React.Component {
constructor() {
super();
this.state = {
backgroundImage: ''
}
}
handleBackgroundChange() {
let backgroundImage = backgroundImage
this.setState({
backgroundImage: backgroundImage
});
}
render() {
return (
<div className="change-bg-wrap">
<input type="file" accept="image/*" />
<button>
<i className="fa fa-picture-o" style={{fontSize: 20}}></i>
</button>
</div>
)
}
}
最佳答案
用display: "none"
隐藏输入元素,然后执行一些javascript,以便在单击按钮时将触发<input>
。
triggerInput = () => {
document.querySelector("input[type='file']").click();
}
<input type="file" accept="image/*" />
<button onClick={this.triggerInput}>
<i className="fa fa-picture-o" style={{fontSize: 20}}></i>
</button>
见https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
将
querySelector
值也缓存在var中编辑:我不认为您可以触发react事件
click()
,这就是为什么我使用本机js。如果我错了,请纠正我。