2014-11-06 13 views
13

Mam ten element tutaj. Chcę przekazać obsługę wywołań do każdej listy, którą utworzę. Jeśli zrobię to jak poniżej, z bind(this), to działa poprawnie. Problemem jest to, że mogę to ostrzeżenie od React w konsoli: 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.Dlaczego React ostrzega mnie przed wiązaniem metody składowej do obiektu?

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> 
    ); 
    } 
}); 

Gdybym nie wiążą go, moje dzieci nie wiedzą na temat obsługi połączeń. Co mogłem zrobić inaczej?

PS:

wiem o zadaniach rozpad, jak wyjaśniono http://facebook.github.io/react/docs/transferring-props.html#transferring-with-...-in-jsx, ale nie chcę używać harmonii.

+0

Przez "obsługi połączeń" masz na myśli obsługi zdarzeń? Zdarzenia powinny bańki do rodzica i mogą być przechwytywane tam. czego mi brakuje? – Mathletics

+1

Nie widzę tego błędu: http://jsfiddle.net/s6dok0xv. –

Odpowiedz

29

Błąd pochodzi z innego miejsca kodu. Otrzymujesz błąd, gdy wykonujesz this.someFunction.bind(something), a coś nie jest null.

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

Nie szukaj .bind(this w kodzie, aby znaleźć linię przestępstwa.

+1

Och, masz rację, to było gdzieś indziej. Jestem zawstydzony teraz – andersem

+3

@FakeRainBrigand Wydaje się, że teraz nie ostrzega w drugim przypadku, '.ind (this, foo)'. Działa z '.ind. (This)'. Przetestowano za pomocą [email protected] https://jsfiddle.net/69z2wepo/17453/ Dokumenty obecnie pokazują, że robią właśnie to: https://facebook.github.io/react/tips/communicate-between-components.html. Ta historia, kiedy związać, a kiedy nie w React, wydaje się być może zbyt skomplikowana. – JMM

+2

Powód, dla którego '.bind (null,' works is that ', ponieważ reaguje na autobinds od [v0.4] (http://facebook.github.io/react/blog/2013/07/02/react-v0-4 -autobind-by-default.html), wykonując '.bind (null', w zasadzie wykonujemy' this.methond.bind (this) .bind (null, arg1, arg2) '. Pomyśl tylko, że niektórzy z was mogą chcieć wiedzieć ** dlaczego ** zadziałało. –

4

Tutaj są aktualizowane docs przykład

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

Update in ReactJS Docs

Powiązane problemy