2014-09-11 11 views
8

Кажется, я неправильно понимаю некоторые фундаментальные части React.js.react.js ReactComponent не предлагает setState()?

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

он говорит, что реагируют компонент имеет такие методы, как SetState().

Но когда я делаю это:

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 

Там нет метода SetState() можно найти. Но в документах он говорит API-интерфейс Component, так что я здесь не так?

+0

Посмотрите http://facebook.github.io/react/blog/2014/03/21/react- v0.10.html # клон-на-горе. 'newComp' на самом деле не является экземпляром компонента, это дескриптор (' MyComp.setState' не может работать вообще, потому что 'MyComp' - это в основном« класс »). –

+1

AHHH. Итак, документы ошибочны. not React.createClass создает экземпляр компонента, но React.renderComponent делает. В этом есть смысл. – ghost23

+0

Документы подразумевают, что вызов 'MyComp (null)' должен возвращать экземпляр, который он сделал в некоторый момент AFAIK. Я проверю, если/как это должно быть обновлено. –

ответ

12

В соответствии с этим blog post и this writeup, вызов MyComp больше не возвращает экземпляр, он возвращает легкий дескриптор.

Anti-модель:

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

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

Правильное использование:

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 
Смежные вопросы