国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

React學(xué)習(xí)筆記—組件復(fù)用

CastlePeaK / 2138人閱讀

摘要:屬性校驗(yàn)隨著應(yīng)用的增長(zhǎng),確保你的組件正確使用是有必要的。混入在當(dāng)中,組件復(fù)用能夠減少我們的代碼量。官方舉例說明的一種情況一個(gè)組件,每隔一段時(shí)間更新一次。提供了組件生命周期的方法告訴我們組件什么時(shí)候被創(chuàng)建和銷毀。

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

屬性校驗(yàn)

隨著應(yīng)用的增長(zhǎng),確保你的組件正確使用是有必要的。React允許我們指定propTypes。React.PropTypes聲明了一系列的校驗(yàn)確保我們接收的數(shù)據(jù)是合法的。如果不合法的數(shù)據(jù)出現(xiàn)在屬性當(dāng)中,控制臺(tái)會(huì)打印警告信息。下面是不同的校驗(yà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!");
      }
    }
  },
  /* ... */
});
屬性默認(rèn)值

React允許我們下面的方式自定義屬性的默認(rèn)值:

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

getDefaultProps()的值將會(huì)被緩存,當(dāng)this.props.value的值沒有被父組件指定時(shí),將會(huì)使用這個(gè)默認(rèn)值。

屬性轉(zhuǎn)移

通過屬性延伸的語(yǔ)法,可以快速的將組件屬性添加到HTML標(biāo)簽上:

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")
);

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

混入

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

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91503.html

相關(guān)文章

  • React學(xué)習(xí)筆記組件組合

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

    xiaodao 評(píng)論0 收藏0
  • React學(xué)習(xí)筆記

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

    taoszu 評(píng)論0 收藏0
  • react入門學(xué)習(xí)筆記(一)

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

    leon 評(píng)論0 收藏0
  • React學(xué)習(xí)筆記—Why React?

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

    余學(xué)文 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<