2014-09-11 11 views
8

Wydaje mi się, że źle rozumiem niektóre podstawowe części pliku React.js.react.js ReactComponent nie oferuje setState()?

W http://facebook.github.io/react/docs/component-api.html

mówi, że składnik reakcji posiada metody jak setState().

Ale kiedy to zrobić:

var MyComp = React.createClass({ 

    getInitialState: function() { 
     return {dummy: "hello"}; 
    }, 

    render: function() { return React.DOM.h1(null, this.state.dummy + ", world!") } 
} 

var newComp = MyComp(null); 

React.renderComponent(newComp, myDomElement); 
MyComp.setState({dummy: "Good Bye"}); // Doesn't work. setState does not exist 
newComp.setState({dummy: "Good Bye"}); // Doesn't work either. setState does not exist 

Nie ma metody setstate() można znaleźć. Ale w dokumentach jest napisane API komponentów, więc co ja tu robię źle?

+0

Wystarczy popatrzeć na http://facebook.github.io/react/blog/2014/03/21/react- v0.10.html # clone-on-mount. 'newComp' nie jest tak naprawdę instancją komponentu, jest deskryptorem (' MyComp.setState' nie może w ogóle działać, ponieważ 'MyComp' jest po prostu" klasą "). –

+1

AHHH. Tak więc doktorzy są w błędzie. nie React.createClass tworzy instancję składnika, ale React.renderComponent ma. To ma sens. – ghost23

+0

Dokumenty sugerują, że wywołanie 'MyComp (null)' powinno zwrócić instancję, co zrobiła w pewnym momencie AFAIK. Sprawdzę, czy/jak należy to zaktualizować. –

Odpowiedz

12

Zgodnie z tymi blog post i this writeup, wywołanie MyComp nie zwraca już wystąpienie, zwraca lekki deskryptor.

Anti-kierunkowa:

var MyComponent = React.createClass({ 
    customMethod: function() { 
    return this.props.foo === 'bar'; 
    }, 
    render: function() { 
    } 
}); 

var component = <MyComponent foo="bar" />; 
component.customMethod(); // invalid use! 

Prawidłowe użycie:

var MyComponent = React.createClass({ 
    customMethod: function() { 
    return this.props.foo === 'bar'; 
    }, 
    render: function() { 
    } 
}); 

var realInstance = React.renderComponent(<MyComponent foo="bar" />, root); 
realInstance.customMethod(); // this is valid 
Powiązane problemy