2014-11-06 17 views
13

Tôi có thành phần này ở đây. Tôi muốn chuyển xuống một trình xử lý cuộc gọi cho mỗi listElement mà tôi tạo ra. Nếu tôi làm như sau, với bind(this), nó hoạt động bình thường. Vấn đề là tôi nhận được cảnh báo này từ React trong bảng điều khiển: bind(): You are binding a component method to the component. React does this for you automatically in a high-performance way, so you can safely remove this call.Tại sao React cảnh báo tôi chống lại ràng buộc một phương pháp thành phần đối tượng?

var MyList = React.createClass({ 
    render: function() { 
    var listElements = this.props.myListValues.map(function (val) { 
     return (
     <ListElement onCallHandler={this.props.parentsCallHandler} val={val} /> 
     ); 
    }.bind(this)); 
    return (
     <ul> 
      {listElements} 
     </ul> 
    ); 
    } 
}); 

Nếu tôi không ràng buộc, con tôi không biết về trình xử lý cuộc gọi. Tôi có thể làm gì khác đi?

PS:

tôi biết về bài tập destructuring, như giải thích http://facebook.github.io/react/docs/transferring-props.html#transferring-with-...-in-jsx, nhưng tôi không muốn sử dụng Harmony.

+0

Bằng cách "xử lý cuộc gọi" Ý anh là xử lý sự kiện? Sự kiện sẽ bong bóng lên đến phụ huynh và có thể được chụp ở đó. Tôi đang thiếu gì? – Mathletics

+1

Tôi không thấy lỗi đó: http://jsfiddle.net/s6dok0xv. –

Trả lời

29

Lỗi đến từ một nơi khác trong mã. Bạn gặp lỗi khi bạn làm this.someFunction.bind(something) và một số nội dung không phải là null.

this.someFunction.bind({}, foo); // warning 
this.someFunction.bind(this, foo); // warning, you're doing this 
this.someFunction.bind(null, foo); // okay! 

Thực hiện tìm kiếm .bind(this trong mã của bạn để tìm dòng vi phạm.

+1

Ồ, bạn nói đúng, đó là một nơi khác. Tôi xấu hổ bây giờ – andersem

+3

@FakeRainBrigand Có vẻ như bây giờ nó không cảnh báo trong trường hợp thứ hai, '.bind (this, foo)'. Nó thực hiện với '.bind (this)'. Thử nghiệm với [email protected] https://jsfiddle.net/69z2wepo/17453/ Và các tài liệu hiện đang hiển thị như vậy: https://facebook.github.io/react/tips/communicate-between-components.html. Câu chuyện này khi nào để ràng buộc và khi không vào React có vẻ quá phức tạp. – JMM

+2

Lý do tại sao '.bind (null,' hoạt động là, kể từ khi tự động phản hồi vì [v0.4] (http://facebook.github.io/react/blog/2013/07/02/react-v0-4 -autobind-by-default.html), bằng cách thực hiện '.bind (null', chúng ta là essentiall thực thi' this.methond.bind (this) .bind (null, arg1, arg2) '. Chỉ cần nghĩ rằng một số bạn có thể muốn để biết ** tại sao ** nó hoạt động. –

4

docs đây được cập nhật ví dụ

React.createClass({ 
    onClick: function(event) {/* do something with this */}, 
    render: function() { 
    return <button onClick={this.onClick} />; 
    } 
}); 

Update in ReactJS Docs

Các vấn đề liên quan