iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0

大綱

  • 屬性是什麼
  • Props

在學習 React 的過程中,與 Vue 其中一點不同的是,React 的資料流是單向的 - 從父層到子層。這使得 React 的元件變得簡單許多且是可預期的。元件從父層取得屬性並進行渲染。如果屬性在最頂層的元件裡做出任何修改,哪 React 會將這個變更向下擴散至整個元件樹,並重新渲染所有使用到這個屬性的元件。

屬性是什麼
屬性,props,是『properties』的縮寫,意思是指被傳遞至元件中,可以保存任何我們想要的格式。以下將介紹,基本的語法,請參照如下。

當與 JSX 一起使用時,可以將屬性設定為字串:
<a href='/surveys/add'>Add survey</a>

也可以使用 {} 來設定,這會放入 JavaScript 程式碼並允許我們傳送任何類型的變數。
<a href={'/surveys/' + survey.id}>{survey.title}</a>

哪我們也可以把 JSX 的展開語法 (spread syntax) 用於物件屬性:

var ListSurveys = React.createClass ({
  render: function() {
    var props = {
      one: 'foo',
      two: 'bar'
    };
    return <SurveyTable {...props}/>;
  }
});

另外,屬性對事件處理器也是很有用的,請看以下範例:

var SaveButton = React.createClass({
  render: function() {
    return (
      <a className='button save' onClick={this.handClick}>Save</a>
    );
  },
  handClick: function() {
    …...
  }
})

這裡我們傳送了一個 onClick 屬性給錨點標記 (anchor tag),其值則為 handClick 函式。每當我們要點擊這個錨點時,handClick 方法就會執行。

PropTrpes
以下是 React 透過元件內定義的設定物件 (config object) 來驗證我們的屬性:

var SurveyTableRow = React.createClass({
  propTypes: {
    survey: React.PropTypes.shape({
      id: React.PropTypes.number.isRequired
    }).isRequired,
    onClick: React.PropTypes.func
  },
  // ...
});

當我們把元件實作化的時候,如果未符合 propTypes 的要求,那麼便會記錄一條 console.warn

另外,要特別說明的是,對於可以選擇的屬性只要不去設定 .isRequired 我們就可以實作化。然而,在應用程式中使用 propTypes 又並非是絕對不要的,但是它們提供了一個很好的方式來讓我們說明這個元件的 API。


上一篇
[Day20] React - 元件生命週期
下一篇
[Day22] React - 事件處理
系列文
好 Js 不學嗎 !? JavaScript 入門中的入門。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言