2014-09-24 25 views
5

Jak mogę zmienić stan komponentu React z mojego starego kodu jQuery ze starszej wersji ?Zmień stan komponentu React na stary zewnętrzny JavaScript?

Mam składnikiem tak:

var AComponent = React.createClass({ 
    getInitialState: function() { 
    return { ids: [] } 
    }, 
    render: function() { 
    ... 
    }, 
    onButtonClick: function() { 
    ids.splice(…); // remove the last id 
    } 
}); 

Kiedy dzieje się coś szczególnego w starym kodzie jQuery zupy, chciałbym naciskać id do AComponent.state.ids. Jak mogę to zrobić?

Jednym "oczywistym" rozwiązaniem jest anty-wzór; tutaj jest:

var componentInstance = AComtonent({}); 
React.renderComponent(componentInstance, document.getElementById(...)); 

// Somewhere else, in the jQuery soup. Something special happens: 
componentIntance.state.ids.push(1234); 
componentIntance.setState(componentInstance.state); 

To antywzorzec projektowy, według this email from a Facebook developer, bo pisze że componentInstance może zostać zniszczona przez React.

+0

Myślę, że według projektu mutacja stanu ma być wewnętrzna, więc jeśli chcesz ją zmienić z zewnątrz, powinieneś użyć rekwizytów. Co oznacza podział komponentu na dwie części w twoim przypadku. IE: przenoszenie twojego stanu do czegoś, co obejmuje twój spust do zupy jquery, a tym samym rozwiązanie twojego problemu. –

+0

@plus Dobrze wiedzieć, że mutacja stanu powinna być wyłącznie wewnętrzna. Nie rozumiem, co masz na myśli mówiąc "obejmując spust do zupy jquery" * - czy miałeś na myśli to, że stan powinien być umieszczony poza komponentem i przekazałbym państwowe mutatory jako rekwizyty do komponentu? (Jak w odpowiedzi Kulesy.) – KajMagnus

Odpowiedz

4

Uczyniłbym element bezpaństwowy. Przechowuj tablicę ids poza składnikiem i przekazuj ją jako rekwizyt z funkcjami, które zmodyfikują tablicę. Zobacz przykład na JSFiddle: http://jsfiddle.net/ohvco4o2/5/