在本章中,我们将学习React组件API。这里将讨论三个方法:setState()
,forceUpdate
和ReactDOM.findDOMNode()
。 在新的ES6类中,必须手动绑定这个。在示例中使用this.method.bind(this)
。
setState()
方法用于更新组件的状态。 这种方法不会替代状态,而只是添加对原始状态的更改。
文件:App.jsx -
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()
方法来实现。
文件:App.jsx -
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操作,可以使用ReactDOM.findDOMNode()
方法。 首先,需要导入react-dom
。
文件:App.jsx -
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 = 'red'; } render() { return ( <div> <button onClick = {this.findDomNodeHandler}>FIND DOME NODE</button> <div id = "myDiv">这是MyDiv的内容</div> </div> ); } } export default App;
当点击按钮,myDiv
元素的颜色变成红色。如下所示 -
注 - 自0.14更新以来,大多数旧的组件API方法都被弃用或删除以适应ES6。