当前位置: 首页 > 面试题库 >

ReactJS无法访问“ this”方法

寿子默
2023-03-14
问题内容

我正在尝试将方法传递给子组件以处理onclick事件。我在网上看到了很多示例,但无法正常运行。当我在父级的渲染功能中并尝试将“
this.handleClick”传递给子级时,handleClick是未定义的。

看一下ThumbList的渲染方法:

var Thumb = React.createClass({
        handleClick: function() {
            console.log(this)
            console.log('handleClick of Thumb')
            this.props.onClick()
        },
        render: function() {
            return(
                    <div className="thumb" key={this.props.thumb.url}>
                        <a href='#' onClick={this.handleClick}>
                            <img src={'/img/rings/thumbs/'+this.props.thumb.url+'_thumb.jpg'} alt="Image"> 
                            </img>         
                        </a>
                    </div>
                );
        }
    });

    var ThumbList = React.createClass({

        handleClick: function (id) {
            console.log('click of ThumbList');

        },


        loadFromServer: function() {
            $.ajax({
                url: 'rings/imgs/5',
                dataType: 'json',
                success: function(data) {
                    this.setState({data: data});
                }.bind(this),
                error: function(xhr, status, err) {
                    console.error('rings/imgs/5', status, err.toString());
                }.bind(this)
            });
        },
        getInitialState: function(){
            return {data: [] };
        },
        componentDidMount: function(){
              this.loadFromServer();
                setInterval(this.loadFromServer, 2000);
                },

        render: function() {
            var handlefunc=this.handleClick
            var thumbsNodes = this.state.data.map(function(thumb) {
                console.log(this.handleClick)  // is Undefined!
                console.log(handlefunc)   // is working
                return (
                        <Thumb thumb={thumb} key={thumb.url} onClick={handlefunc.bind(this,thumb.url)}/>
                );
            });

            return(
                        <div className="col-md-1 col-md-offset-1" id='thumbs'>
                            {thumbsNodes}
                        </div>

                );
            }

    });

知道我可能会缺少什么吗?


问题答案:

如果您在开发工作流程中使用Babel之类的编译器,则建议使用箭头函数:

var thumbsNodes = this.state.data.map((thumb) => {
  console.log(this.handleClick);
  return <Thumb thumb={thumb} key={thumb.url} 
                onClick={this.handlefunc.bind(this,thumb.url)}/>;
});

如您所见,这是一个很好的紧凑语法。箭头功能将为您保留this上下文。Babel编译器生成使用闭包的JavaScript:

var thumbsNodes = this.state.data.map(function(thumb) {
  var _this = this;
  console.log(_this.handleClick);
  return <Thumb thumb={thumb} key={thumb.url} 
                onClick={_this.handlefunc.bind(_this,thumb.url)}/>;
});


 类似资料:
  • 问题内容: 例如,我有一个带有两种绑定方法的react组件: 在上面的代码中,我有两种绑定方法:一种是和一种是。功能有效,但无效。运行时,它返回错误: TypeError:无法读取未定义的属性“ handleRemoveComment” 问题答案: 问题在于这条线: 因为您忘记了绑定,映射回调方法,所以inside 方法将不会引用类上下文。 使用这些解决方案中的 任何一种 ,它将起作用。 1- 在

  • 问题内容: 为什么我不能从ReactJS的“外部”访问组件方法?为什么不可能,有什么办法解决呢? 考虑一下代码: 问题答案: React通过attribute提供了一个您要尝试执行的操作的接口。给组件分配一个,其属性将是您的自定义组件: 注意 :仅根据下面的文档,如果子组件被声明为类,则此方法才有效:https : //facebook.github.io/react/docs/refs-and-

  • 在这个es6脚本中,click事件不起作用,因为方法是用( )作为 调用的。 如何将一个事件关联到一个方法而不松散作用域? 匿名用户 这是一个常见的JS问题,但其核心是 无异于 您正在将函数作为事件处理程序传递,但没有确保在调用时将设置为所需的值。在ES5中实现这一点的最简单的方法是 或在ES6中,使用箭头函数: 但是请注意,这两种解决方案都将破坏中的逻辑(已经稍微破坏了),因为 您不再有任何对附

  • 问题内容: 我正在遵循一个教程来更新ReactJS中的状态。我在本教程中碰到了这一行,但我不知道发生了什么。我了解此基本知识并进行绑定,但我从未见过如此做过。有人可以解释一下吗?完整代码: 问题答案: 诸如事件之类的DOM回调会将上下文设置为DOM元素本身,在本例中为。尝试删除您不了解的部分,然后看看会发生什么- 您会看到类似的内容,因为该功能未在元素的上下文中定义(基本上是在寻找)。 什么是在该

  • 我在ReactJS中得到了一个子类和一个父类。我想让我的孩子访问父级的状态,这是每毫秒更新一次。孩子也应该有可能接触到一些父母的方法。 在另一个类中,我正在初始化一个子对象并对其调用Function startManager()。但随后我收到一条错误消息,说无法读取未定义的属性“start”。我是一个新的反应者,我认为我在定义孩子的属性时犯了一些错误。有人知道我做错了什么吗。谢谢

  • javafx错误和项目结构映像 .fxml由Scenebuilder生成