2015-03-21 15 views
18

Tôi có một câu hỏi về truyền đối số cho Phản ứng nhấp xử lý. Tôi có đoạn code sau, nhưng vì một lý do đối số nút không được truyền cho hàm chuyển đổi. Phải không? Nó được định nghĩa theo cách này bởi vì nó là một thành phần đệ quy.đèo lập luận để reactjs nhấp handler

var Element = React.createClass({ 

    toggle: function(e,node){ 

    }, 

    render: function(){ 

     var nodes = this.props.children.map(function(n){ 

       return <Element node={n} text={n.text} children={n.children} /> 

     }); 

     return (
       <span onClick={this.toggle.bind(this,this.props.node)}>{this.props.text}</span> 

     ); 
    } 

}); 
+0

Tôi không hoàn toàn hiểu được lý do tại sao bạn thậm chí có ràng buộc về 'this.props.node'. Bạn chỉ có thể truy cập 'this.props.node' trong phương thức bật tắt. –

+0

Tôi không chắc mình có thể theo dõi hay không. Bạn đang chỉ định kết quả cuộc gọi của mình để ánh xạ tới biến của nút mà sau đó bạn không bao giờ sử dụng. Tôi không hiểu mã này phải làm gì hoặc đạt được. –

Trả lời

23

Function.prototype.bind đối số liên kết bắt đầu từ bên trái. Các cách chính xác để nhận đối số nút là để tìm kiếm nó ở vị trí rất trái của danh sách đối số:

toggle: function(node, event) { 
    console.log('node', node); 
    console.log('event', event); 
} 

Xem http://jsfiddle.net/8xxfgce7/ cho một ví dụ.

+0

Bạn phải làm điều gì đó sai khác nhau, điều này làm việc hoàn toàn tốt đẹp: http://jsfiddle.net/8xxfgce7/ –

+0

Bạn hoàn toàn có thể thiết lập giá trị của một tài sản để một nút khác nhau, thậm chí trong một bản đồ. Vấn đề ở đây là bạn không thực sự render mảng 'nodes'. Có rất nhiều điều sai trái với mã của bạn. Cách kinh điển của giao để this.props.children, là phải vượt qua các nút như trẻ em (''). Gán cho 'tài sản children' như' , ]} /> 'có thể làm việc, nhưng không phải là cách kinh điển. Ngoài ra, một khi bạn thực sự bắt đầu rendering 'nodes' mã của bạn sẽ kết thúc trong một ngăn xếp tràn vì đệ quy không bao giờ phá vỡ. –

+1

Tôi đã tìm thấy sự cố. Nó được gây ra bởi một lỗi không liên quan. My xấu – TGH

0

Trong khi câu trả lời trên là chính xác. Dưới đây là một ví dụ khác làm thế nào để vượt qua cả kiệntham số để onClick chức năng.

sự kiện bắn của bạn yếu tố ví dụ một nút:

<button onClick={this.editTask.bind(this, item._id)}> 
    Edit item 
</button> 

Event hàm điều khiển:

editItem(id, event) { 
    event.preventDefault() // Prevents default form submission 
    console.log('id: ', id) // Prints the item id 
    . 
    . 
    . 
} 
Các vấn đề liên quan