Javascript 从容器访问组件“this”

Javascript 从容器访问组件“this”,javascript,reactjs,Javascript,Reactjs,我使用道具传递组件需要运行的函数。尽可能使组件保持沉默。而不是将函数放入react类中 我需要更新我的组件状态,但从prop函数中访问setState时遇到问题。我尝试过这样做,以便我的函数可以访问它,但我不断遇到错误: 组成部分 componentDidMount(){ this.props.loadImage(this.props.src).bind(this); } 集装箱装载图像功能 let loadImage = (src)=>{ console.log('

我使用道具传递组件需要运行的函数。尽可能使组件保持沉默。而不是将函数放入react类中

我需要更新我的组件状态,但从prop函数中访问setState时遇到问题。我尝试过这样做,以便我的函数可以访问它,但我不断遇到错误:

组成部分

  componentDidMount(){
    this.props.loadImage(this.props.src).bind(this);
  }
集装箱装载图像功能

let loadImage = (src)=>{
  console.log('loading Image');    
  fetch(src).then(function( data ) {
      console.log('success');
      that.setState({'imgUrl':src});
  }).catch(function( error ) {
      console.log('fail');
      setTimeout(loadImage(src), 1000);
  });

};
错误:

component.js:67 Uncaught TypeError: Cannot read property 'bind' of undefined(…)
  • 为什么在这个prop函数中bind未定义
  • 我是不是走错了路

  • 谢谢

    如果
    loadImage
    没有返回函数,那么您可能在未定义时调用了
    bind
    。您可能需要执行
    this.props.loadImage.bind(this,this.props.src)取而代之

    如果
    loadImage
    没有返回函数,那么您可能在未定义时调用了
    bind
    。您可能需要执行
    this.props.loadImage.bind(this,this.props.src)取而代之

    首先为什么要绑定这个

    类示例扩展了React.Component{
    构造函数(){
    超级();
    此.state={
    数据:“”
    }
    }
    componentDidMount(){
    这个。doSomething(“你好”);
    }
    剂量测量(数据){
    这是我的国家({
    数据
    },()=>console.log(this.state));
    }
    render(){
    返回(
    {this.state.data}
    );
    }
    }
    ReactDOM.render(,document.getElementById('View'))
    
    首先为什么要绑定
    这个

    类示例扩展了React.Component{
    构造函数(){
    超级();
    此.state={
    数据:“”
    }
    }
    componentDidMount(){
    这个。doSomething(“你好”);
    }
    剂量测量(数据){
    这是我的国家({
    数据
    },()=>console.log(this.state));
    }
    render(){
    返回(
    {this.state.data}
    );
    }
    }
    ReactDOM.render(,document.getElementById('View'))
    
    
    
    如果看不到
    loadImage
    及其返回的内容,很难判断。介意分享吗?@ZekeDroid认为它没有多大影响,但只是添加了它。因为现在你正在绑定该道具的返回值。这意味着,如果该道具没有返回语句(看起来是这样的),那么您将尝试绑定到
    未定义的
    。如果看不到
    loadImage
    及其返回的内容,很难判断。介意分享吗?@ZekeDroid认为它没有多大影响,但只是添加了它。因为现在你正在绑定该道具的返回值。这意味着,如果该prop没有返回语句(看起来是这样),那么您试图绑定到
    undefined
    。也可以单独绑定和调用以显式设置参数:
    this.props.loadImage.bind(this.call)(undefined,this.props.src)
    我相信
    bind
    只会返回一个函数,对吗?这意味着
    loadImage
    将不会被
    call
    edahh调用,因为某种原因,我认为bind也调用了该函数,对于使用bind仍然是新手。将bind与call结合使用产生了伟大的思想。很高兴认识你。谢谢@Guavata和@mr Meeseeks也可以分别绑定和调用来显式设置参数:
    this.props.loadImage.bind(this.call)(未定义,this.props.src)
    我相信
    bind
    只会返回一个函数,对吗?这意味着
    loadImage
    将不会被
    call
    edahh调用,因为某种原因,我认为bind也调用了该函数,对于使用bind仍然是新手。将bind与call结合使用产生了伟大的思想。很高兴认识你。谢谢@Guavata和@Meeseeks先生至少据我所知,保持组件尽可能简单、专注于显示是最好的做法。将函数放入容器文件以处理功能和数据检索。这种做法有时需要添加一些额外的样板代码,但我觉得总的来说是值得的。至少从我的理解来看,保持组件尽可能简单、专注于显示是最好的做法。将函数放入容器文件以处理功能和数据检索。这种做法有时需要添加一些额外的样板代码,但我觉得总的来说是值得的。