Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滑块上的React onchange函数与html img_Javascript_Html_Css_Reactjs - Fatal编程技术网

Javascript 滑块上的React onchange函数与html img

Javascript 滑块上的React onchange函数与html img,javascript,html,css,reactjs,Javascript,Html,Css,Reactjs,我试图改变风格时,滑块改变。例如,我想在React中增加滑块时添加亮度。我这样做了,但是每当滑块通过onchange事件时,我似乎无法将样式添加到图像中。代码如下: import React, { Component } from 'react'; import { BsFileEarmarkPlus } from 'react-icons/bs'; import ReactSlider from 'react-slider'; class Edit extends React.Compone

我试图改变风格时,滑块改变。例如,我想在React中增加滑块时添加亮度。我这样做了,但是每当滑块通过onchange事件时,我似乎无法将样式添加到图像中。代码如下:

import React, { Component } from 'react';
import { BsFileEarmarkPlus } from 'react-icons/bs';
import ReactSlider from 'react-slider';

class Edit extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            file: null,
        }
        this.ImageUpload = this.ImageUpload.bind(this);
        this.ChangeImage = this.ChangeImage.bind(this);
    }

    ImageUpload(event) {
        console.log(event.target.files[0]);
        this.setState({
            file: URL.createObjectURL(event.target.files[0]),
        });
    }

    ChangeImage(props) {
        console.log(props);
        var amount = this.props + '%';
        var imgStyles = {
            filter: 'brightness(' + amount + ')'
        }
    }

    render() {
        return (
            <div className="editor">
                <h1>Editor</h1>
                <label htmlFor="fileChoose"><BsFileEarmarkPlus />Upload
                    <input type="file" id="fileChoose" onChange={this.ImageUpload} />
                </label>
                <hr />
                <div className="img-surround">
                <img 
                    src={this.state.file} 
                    id="img"
                    style={imgStyles} />
                </div>

                <div className="edit-nav">
                    <ReactSlider
                    className="horizontal-slider"
                    defaultValue={0}
                    max={100}
                    min={-100}
                    thumbClassName="example-thumb"
                    trackClassName="example-track"
                    renderThumb={(props, state) => <div {...props}>{state.valueNow}</div>}
                    onChange={this.ChangeImage}
                    />
                </div>
            </div>
        );
    }
}

export default Edit;
import React,{Component}来自'React';
从'react icons/bs'导入{bsfilearmarkplus};
从“反应滑块”导入反应滑块;
类编辑扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
文件:null,
}
this.ImageUpload=this.ImageUpload.bind(this);
this.ChangeImage=this.ChangeImage.bind(this);
}
图像上载(事件){
console.log(event.target.files[0]);
这是我的国家({
文件:URL.createObjectURL(event.target.files[0]),
});
}
改变形象(道具){
控制台日志(道具);
var金额=this.props+'%';
变量imgStyles={
过滤器:“亮度(“+amount+”)”
}
}
render(){
返回(
编辑
上传

{state.valueNow} onChange={this.ChangeImage} /> ); } } 导出默认编辑;

唯一的问题是imgStyles在从render()外部调用时未定义。其他一切都可以工作。

因为您在“ChangeImage”函数中定义了“imgStyles”变量。 您应该在类外定义此变量或将其定义为状态变量

var imgStyles = {};
class Edit extends React.Component {
...

 ChangeImage(props) {
  console.log(props);
  var amount = this.props + '%';
  imgStyles = {
   filter: 'brightness(' + amount + ')'
  }
 }
...

。。。
建造师(道具){
超级(道具);
此.state={
文件:null,
imgStyles:{}
}
}
...
改变形象(道具){
控制台日志(道具);
var金额=this.props+'%';
this.setState({imgStyles:{filter:'brightness('+amount+')')});
}
...
...

有趣的是,请逐步执行或添加日志记录,以确保更新了正确的元素。我在imgStyles的console.log()中执行了此操作。它返回的结果与代码示例中定义的完全相同。唯一的问题是,他们说道具是一个[对象],但当记录道具本身时,它给出了滑块的当前值。删除这个.props到props实际上改变了它的价值,所以谢谢
...
 constructor(props) {
  super(props);
  this.state = {
   file: null,
   imgStyles: {}
  }
 }
...

ChangeImage(props) {
  console.log(props);
  var amount = this.props + '%';
  this.setState({ imgStyles: { filter: 'brightness(' + amount + ')' } });
}
...
     <img 
      src={this.state.file} 
      id="img"
      style={this.state.imgStyles} />
...