【问题标题】:No call function of parent in ReactjsReactjs中没有父级的调用函数
【发布时间】:2015-06-19 00:53:52
【问题描述】:

我在 Reactjs 中有两个函数。当函数一调用函数二的函数时。有与

相同的错误

“未捕获的 TypeError:this.props.onButonShowClick 不是函数”

这是功能一:

var HiddenEdit = React.createClass({
    _handleOnClick: function(e) {
        e.preventDefault(),
        this.props.onButonShowClick(true);
    },
    render: function() {
        return (<span className="col-lg-2 btn-action-group">
            <a className="add btn-for-view" href={this.props.url_detail} id="btn-add-chapter-123" title="Add"></a>
            <a className="edit btn-for-view" onClick={this._handleOnClick} id={this.props.id_chapter} title="Edit"></a>
            <a className="trash btn-for-delete btn-delete-episode" data-confirm="Are you sure?" rel="nofollow" data-method="delete" href=""></a>
        </span>);
    }
});

这是一个函数二

var ChapterList = React.createClass({
    _handleOnPaginate: function(pageNumber) {
        this.props.inPagenate(pageNumber)
    },
    getInitialState: function () {
    return { 
        childVisible: false 
    };
},
_handleOnClick: function(params) {
    this.state.childVisible = params;
},
render: function() {
    var showEdit = this.state.childVisible;
    var chapterNodes = this.props.data.chapters.map(function(chapter, index) {
        var url_chapter_detail = "/admin/chapters/" + chapter.chapter_id + "/chapter_details";
        var btn_edit = "btn-edit-chapter-" + chapter.chapter_id;
        var href_delete = "/admin/mangas/" + chapter.manga_id + "/chapters/" + chapter.chapter_id;
        var div_chapter = "chapter-" + chapter.chapter_id;
        return (<div className="row item-data" id={div_chapter}>
            <div className="text-data-row">
                <input value={chapter.chapter_id} type="hidden" className="chapter[manga_id]" id="chapter_manga_id" />
                <span className="col-lg-1">
                <input className="form-control" disabled="disabled" type="text" value={chapter.chapter_order} name="chapter[chapter_order]" id="chapter_chapter_order" />
            </span>
            <span className="col-lg-5">
                <input className="form-control" disabled="disabled" type="text" value={chapter.chapter_name} name="chapter[chapter_name]" id="chapter_chapter_name" />
            </span>
            <span className="col-lg-2">
                <input className="form-control" disabled="disabled" type="text" value={chapter.by_group} name="chapter[by_group]" id="chapter_by_group" />
            </span>
            {
                showEdit ? <ShowEdit url_detail={url_chapter_detail} id_chapter="btn_edit" /> : <HiddenEdit onButonShowClick={this._handleOnClick} url_detail={url_chapter_detail} id_chapter="btn_edit" /> 
            }
        </div>
    </div>);
});

return (<div className="form-post-movie" id="form-post-movie" role="form">
    <div className="col-lg-12">
        <div className="list-data">
            {chapterNodes}
        </div>
    </div>
</div>
<div className="div-page">
    <PaginatorSection totalPages={this.props.data.meta.total_pages} currentPage={this.props.data.meta.current_page} onPaginate={this._handleOnPaginate} />                         
</div>
</div>);
}
});

谁能帮我解决这个问题?

【问题讨论】:

  • 你在哪里从第一个函数调用第二个函数?我找不到它。

标签: javascript jquery ruby-on-rails reactjs


【解决方案1】:

嗯,this 在数组映射的回调中是未定义的。 (Array.prototype.map() docs)

作为 onButtonShowClick 属性传递的值也是如此。

<HiddenEdit onButonShowClick={this._handleOnClick} url_detail={url_chapter_detail} id_chapter="btn_edit" />

您应该通过传递 this 作为该地图的第二个参数来修复它:

var chapterNodes = this.props.data.chapters.map(function(chapter, index) { /*...*/ }, this);

此外,您应该查看 React 的有关动态子级的文档。

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多