摘要:屬性校驗(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
摘要:說的通俗點(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è)...
摘要:?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將...
摘要:選擇的主要原因大概是因?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)論了...
摘要:官方說法注本人英語(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ù)。很多...
閱讀 1492·2021-11-24 11:16
閱讀 2697·2021-07-28 12:32
閱讀 2308·2019-08-30 11:22
閱讀 1445·2019-08-30 11:01
閱讀 604·2019-08-29 16:24
閱讀 3552·2019-08-29 12:52
閱讀 1632·2019-08-29 12:15
閱讀 1338·2019-08-29 11:18