我正在尝试创建一个背景图像更新器/上传器组件。

但是,如果用户想要更新背景图像,则默认情况下会设置一个图像,而我想更新状态并存储该图像。

到目前为止的研究表明,我需要使用<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。如果我错了,请纠正我。

07-28 10:54