成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

React學習筆記—組件復用

CastlePeaK / 2189人閱讀

摘要:屬性校驗隨著應用的增長,確保你的組件正確使用是有必要的?;烊朐诋斨?,組件復用能夠減少我們的代碼量。官方舉例說明的一種情況一個組件,每隔一段時間更新一次。提供了組件生命周期的方法告訴我們組件什么時候被創(chuàng)建和銷毀。

當我們在設(shè)計接口的時候,將一些常見的設(shè)計元素(如按鈕、表單、布局等)拆分成有著良好接口的可重用的組件。這樣的話,下次你構(gòu)建UI的時候只要寫少量的代碼。

屬性校驗

隨著應用的增長,確保你的組件正確使用是有必要的。React允許我們指定propTypes。React.PropTypes聲明了一系列的校驗確保我們接收的數(shù)據(jù)是合法的。如果不合法的數(shù)據(jù)出現(xiàn)在屬性當中,控制臺會打印警告信息。下面是不同的校驗類型:

React.createClass({
  propTypes: {
    // You can declare that a prop is a specific JS primitive. By default, these
    // are all optional.
    optionalArray: React.PropTypes.array,
    optionalBool: React.PropTypes.bool,
    optionalFunc: React.PropTypes.func,
    optionalNumber: React.PropTypes.number,
    optionalObject: React.PropTypes.object,
    optionalString: React.PropTypes.string,

    // Anything that can be rendered: numbers, strings, elements or an array
    // containing these types.
    optionalNode: React.PropTypes.node,

    // A React element.
    optionalElement: React.PropTypes.element,

    // You can also declare that a prop is an instance of a class. This uses
    // JS"s instanceof operator.
    optionalMessage: React.PropTypes.instanceOf(Message),

    // You can ensure that your prop is limited to specific values by treating
    // it as an enum.
    optionalEnum: React.PropTypes.oneOf(["News", "Photos"]),

    // An object that could be one of many types
    optionalUnion: React.PropTypes.oneOfType([
      React.PropTypes.string,
      React.PropTypes.number,
      React.PropTypes.instanceOf(Message)
    ]),

    // An array of a certain type
    optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),

    // An object with property values of a certain type
    optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),

    // An object taking on a particular shape
    optionalObjectWithShape: React.PropTypes.shape({
      color: React.PropTypes.string,
      fontSize: React.PropTypes.number
    }),

    // You can chain any of the above with `isRequired` to make sure a warning
    // is shown if the prop isn"t provided.
    requiredFunc: React.PropTypes.func.isRequired,

    // A value of any data type
    requiredAny: React.PropTypes.any.isRequired,

    // You can also specify a custom validator. It should return an Error
    // object if the validation fails. Don"t `console.warn` or throw, as this
    // won"t work inside `oneOfType`.
    customProp: function(props, propName, componentName) {
      if (!/matchme/.test(props[propName])) {
        return new Error("Validation failed!");
      }
    }
  },
  /* ... */
});
屬性默認值

React允許我們下面的方式自定義屬性的默認值:

var ComponentWithDefaultProps = React.createClass({
  getDefaultProps: function() {
    return {
      value: "default value"
    };
  }
  /* ... */
});

getDefaultProps()的值將會被緩存,當this.props.value的值沒有被父組件指定時,將會使用這個默認值。

屬性轉(zhuǎn)移

通過屬性延伸的語法,可以快速的將組件屬性添加到HTML標簽上:

var CheckLink = React.createClass({
  render: function() {
    // This takes any props passed to CheckLink and copies them to 
    return ;
  }
});

React.render(
  
    Click here!
  ,
  document.getElementById("example")
);

需要注意的是,這種寫法會添加所有的屬性。當標簽內(nèi)容為空時,children也會被添加其中。上面的例子是一個很好的實踐。

混入

在React當中,組件復用能夠減少我們的代碼量。但有時候不同的組件之間可能會相同的功能點。這個通常被叫做Cross-cutting concern。React提供了混入來解決這個問題。
官方舉例說明的一種情況:一個組件,每隔一段時間更新一次。很容易就想到使用setInterval(),當不需要的時候需要取消Interval。React提供了組件生命周期的方法告訴我們組件什么時候被創(chuàng)建和銷毀。根據(jù)這些創(chuàng)建一個簡單的混入:

var SetIntervalMixin = {
  componentWillMount: function() {
    this.intervals = [];
  },
  setInterval: function() {
    this.intervals.push(setInterval.apply(null, arguments));
  },
  componentWillUnmount: function() {
    this.intervals.map(clearInterval);
  }
};

var TickTock = React.createClass({
  mixins: [SetIntervalMixin], // Use the mixin
  getInitialState: function() {
    return {seconds: 0};
  },
  componentDidMount: function() {
    this.setInterval(this.tick, 1000); // Call a method on the mixin
  },
  tick: function() {
    this.setState({seconds: this.state.seconds + 1});
  },
  render: function() {
    return (
      

React has been running for {this.state.seconds} seconds.

); } }); React.render( , document.getElementById("example") );

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/91503.html

相關(guān)文章

  • React學習筆記組件組合

    摘要:說的通俗點如果組件出現(xiàn)在了組件的方法中,那么組件就是所有者。所有者和被所有者關(guān)系是針對組件的,父子關(guān)系是針對結(jié)構(gòu)的。子調(diào)節(jié)調(diào)節(jié)發(fā)生在更新的過程中。帶有狀態(tài)的子節(jié)點對大部分組件來說,問題不大。應該加在組件上,而不是標簽上。 關(guān)注分離 我們在編程的時候碰到相同的功能,可以通過抽出公共方法或者類來實現(xiàn)復用。當我們構(gòu)建新的組件的時候,盡量保持我們的組件同業(yè)務邏輯分離,將相同功能的組件抽出一個...

    xiaodao 評論0 收藏0
  • React學習筆記

    摘要:單向數(shù)據(jù)流數(shù)據(jù)一旦更新,會渲染整個。的渲染方式用戶輸入從獲取數(shù)據(jù)將數(shù)據(jù)傳給頂層組件將每個組件渲染出來由于是單向數(shù)據(jù)流,所以不會有雙向數(shù)據(jù)綁定數(shù)據(jù)模型的臟檢查確切的操作。 你覺得你用的react框架有什么特點呢? 1)使用jsx語法,可以在js中寫html。2)單向數(shù)據(jù)流:數(shù)據(jù)一旦更新,會渲染整個app。react的渲染方式: 用戶輸入 從API獲取數(shù)據(jù) 將數(shù)據(jù)傳給頂層組件 React將...

    taoszu 評論0 收藏0
  • react入門學習筆記(一)

    摘要:選擇的主要原因大概是因為該框架出現(xiàn)較早,感覺上會相對成熟,日后學習中遇到問題想要查找答案相對簡單一些,對,就是這么簡單。多說無益,接下來開始的學習,我按照我學習中帶著的問題來一一解答,完成我的入門筆記。主要是針對前端的組件化開發(fā)。 這兩天得空,特意來折騰了以下時下火熱的前端框架react,至于為什么選react,作為一個初學者react和vue在技術(shù)上的優(yōu)劣我無權(quán)評論,也就不妄加評論了...

    leon 評論0 收藏0
  • React學習筆記—Why React?

    摘要:官方說法注本人英語二十六級是和用來創(chuàng)建用戶界面的庫。很多人將認為是中的。怎么說呢現(xiàn)在的自己就是個跟風狗啊,什么流行先學習了再說,再看看能不能應用在具體項目上。暫時先停下的學習,坐等。不過學習的腳步還是跟不上潮流的發(fā)展速度啊。 Why React? 官方說法 注:本人英語二十六級 React是Facebook和Instagram用來創(chuàng)建用戶界面的JavaScript庫。很多...

    余學文 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<