React入門--------組件API

來源:互聯網
上載者:User

標籤:git   cal   component   api   img   render   node   this   htm   

setState

參數:nextState(object),[callback(function)]

設定nextState的某個索引值。通常如果希望在某個事件或某個回調中來重新渲染組件,setState是一個最常用的觸發方法,因為我們把UI內容跟state狀態直接綁定在一起,一旦state發生改變並觸動了綁定的邏輯,那麼ui內容自然也會跟著變動:

 var Component1 = React.createClass({        getInitialState: function() {            return {                isClick: !1            }        },        componentDidUpdate: function(){            console.log(‘componentDidUpdate‘)        },        clickCb: function() {            this.setState({                isClick : !0            }, function(){                console.log(this.state.isClick)            })        },        render: function() {            return (<div onClick={this.clickCb}>            isClick:{this.state.isClick ? ‘yes‘ : ‘nope‘}            </div>)        }    });    var div = document.getElementById(‘a‘);    ReactDOM.render(        <Component1 />, div    );

如上通過state.isClick來決定div內要顯示的內容,而我們點擊div時會改變state.isClick的狀態,從而觸發綁定條件更改了div中的內容。

運行結果如下:

注意:該方法的回調是在重新渲染之後執行的。

replaceState

參數:nextState(object),[callback(function)]

整體更換掉state,回調方法在重新渲染之後執行。

forceUpdate

參數:[callback(function)]

在任何調用的時候強制渲染組件,即使使用shouldComponentUpdata返回了false

注意:該方法的回調也是在重新渲染之後執行的。

getDOMNode

返回組件/ReactElment掛載到頁面上所對應的DOM元素

 var Component1 = React.createClass({        getInitialState: function() {            return {                isClick: !1            }        },        clickCb: function() {            this.setState({                isClick : !0            }, function(){                console.log(this.state.isClick)            })        },        render: function() {            return (<div onClick={this.clickCb}>            isClick:{this.state.isClick ? ‘yes‘ : ‘nope‘}            </div>)        }    });    var div = document.getElementById(‘a‘);    var c = ReactDOM.render(        <Component1 />, div    );    console.log(c.getDOMNode())

isMounted

返回一個布爾值,如果組件掛載到了dom中,isMounted()返回true

var UserGist = React.createClass({  getInitialState: function() {    return {      username: ‘‘,      lastGistUrl: ‘‘    };  },  componentDidMount: function() {    $.get(this.props.source, function(result) {      var lastGist = result[0];      if (this.isMounted()) {        this.setState({          username: lastGist.owner.login,          lastGistUrl: lastGist.html_url        });      }    }.bind(this));  },  render: function() {    return (      <div>        {this.state.username}‘s last gist is        <a href={this.state.lastGistUrl}>here</a>.      </div>    );  }});ReactDOM.render(  <UserGist source="https://api.github.com/users/octocat/gists" />,  document.body);

setProps

參數:nextProps(object),[callback(function)]

和setState類似,不過修改的是props。

replaceProps

參數:nextProps(object),[callback(function)]

和replaceState類似,不過修改的是props。

refs

這個方法不屬於組件,但也是在組件中常用的一個小技巧

在前面中提到,可以使用ReactClass.getDOMNode()的方法來擷取到組件渲染在頁面上的DOM節點,但是如果希望擷取到的,是組件中的某個DOM元素呢

 var Component1 = React.createClass({        clickCb: function(e) {            if(e.target === this.refs.li2.getDOMNode()){                alert(‘你點到第二個LI了‘)            }        },        render: function() {            return (<ul onClick={this.clickCb}>                <li>1</li>                <li ref="li2">2</li>                <li>3</li>            </ul>)        }    });    var div = document.getElementById(‘a‘);    ReactDOM.render(            <Component1 />, div    );

組件中的第二個li綁定了一個ref屬性,值為li2,這意味著可以在組件中以this.refs.li2的形式來擷取到改ReactElement。然後綁定點擊事件,在點擊的時候判斷被點擊的li元素是否等於this.refs.lis.getDOMNode9()。

下面再看一個例子:

 var App = React.createClass({    getInitialState: function() {      return {userInput: ‘‘};    },    handleChange: function(e) {      this.setState({userInput: e.target.value});    },    clearAndFocusInput: function() {      // Clear the input      this.setState({userInput: ‘‘}, function() {        // 組件重繪後會立即執行這句代碼:        this.refs.theInput.getDOMNode().focus();   // input成功聚焦(focus)      });    },    render: function() {      return (        <div>          <div onClick={this.clearAndFocusInput}>            Click to Focus and Reset          </div>          <input            ref="theInput" //我們可以在組件裡以 this.refs.theInput 擷取到它            value={this.state.userInput}            onChange={this.handleChange}          />        </div>      );    }  });

 

React入門--------組件API

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.