ReactJS - API компонентов
В этой главе мы объясним API компонента React. Мы обсудим три метода:setState(), forceUpdate и ReactDOM.findDOMNode(). В новых классах ES6 мы должны привязать это вручную. Мы будем использоватьthis.method.bind(this) в примерах.
Установить состояние
setState()используется для обновления состояния компонента. Этот метод не заменит состояние, а только добавит изменения в исходное состояние.
import React from 'react';
class App extends React.Component {
constructor() {
super();
this.state = {
data: []
}
this.setStateHandler = this.setStateHandler.bind(this);
};
setStateHandler() {
var item = "setState..."
var myArray = this.state.data.slice();
myArray.push(item);
this.setState({data: myArray})
};
render() {
return (
<div>
<button onClick = {this.setStateHandler}>SET STATE</button>
<h4>State Array: {this.state.data}</h4>
</div>
);
}
}
export default App;
Мы начали с пустого массива. Каждый раз, когда мы нажимаем кнопку, состояние обновляется. Если щелкнуть пять раз, мы получим следующий результат.
Принудительное обновление
Иногда нам может потребоваться обновить компонент вручную. Этого можно добиться с помощьюforceUpdate() метод.
import React from 'react';
class App extends React.Component {
constructor() {
super();
this.forceUpdateHandler = this.forceUpdateHandler.bind(this);
};
forceUpdateHandler() {
this.forceUpdate();
};
render() {
return (
<div>
<button onClick = {this.forceUpdateHandler}>FORCE UPDATE</button>
<h4>Random number: {Math.random()}</h4>
</div>
);
}
}
export default App;
Мы устанавливаем случайное число, которое будет обновляться каждый раз при нажатии кнопки.
Найти Dom Node
Для манипуляции с DOM мы можем использовать ReactDOM.findDOMNode()метод. Сначала нам нужно импортироватьreact-dom.
import React from 'react';
import ReactDOM from 'react-dom';
class App extends React.Component {
constructor() {
super();
this.findDomNodeHandler = this.findDomNodeHandler.bind(this);
};
findDomNodeHandler() {
var myDiv = document.getElementById('myDiv');
ReactDOM.findDOMNode(myDiv).style.color = 'green';
}
render() {
return (
<div>
<button onClick = {this.findDomNodeHandler}>FIND DOME NODE</button>
<div id = "myDiv">NODE</div>
</div>
);
}
}
export default App;
Цвет myDiv после нажатия кнопки элемент становится зеленым.
Note - Начиная с обновления 0.14, большинство старых методов API компонентов объявлены устаревшими или удалены в соответствии с ES6.