摘要:屬性校驗隨著應用的增長,確保你的組件正確使用是有必要的?;烊朐诋斨?,組件復用能夠減少我們的代碼量。官方舉例說明的一種情況一個組件,每隔一段時間更新一次。提供了組件生命周期的方法告訴我們組件什么時候被創(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
摘要:說的通俗點如果組件出現(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è)務邏輯分離,將相同功能的組件抽出一個...
摘要:單向數(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將...
摘要:選擇的主要原因大概是因為該框架出現(xiàn)較早,感覺上會相對成熟,日后學習中遇到問題想要查找答案相對簡單一些,對,就是這么簡單。多說無益,接下來開始的學習,我按照我學習中帶著的問題來一一解答,完成我的入門筆記。主要是針對前端的組件化開發(fā)。 這兩天得空,特意來折騰了以下時下火熱的前端框架react,至于為什么選react,作為一個初學者react和vue在技術(shù)上的優(yōu)劣我無權(quán)評論,也就不妄加評論了...
摘要:官方說法注本人英語二十六級是和用來創(chuàng)建用戶界面的庫。很多人將認為是中的。怎么說呢現(xiàn)在的自己就是個跟風狗啊,什么流行先學習了再說,再看看能不能應用在具體項目上。暫時先停下的學習,坐等。不過學習的腳步還是跟不上潮流的發(fā)展速度啊。 Why React? 官方說法 注:本人英語二十六級 React是Facebook和Instagram用來創(chuàng)建用戶界面的JavaScript庫。很多...
閱讀 1593·2021-11-24 11:16
閱讀 2861·2021-07-28 12:32
閱讀 2394·2019-08-30 11:22
閱讀 1500·2019-08-30 11:01
閱讀 676·2019-08-29 16:24
閱讀 3623·2019-08-29 12:52
閱讀 1695·2019-08-29 12:15
閱讀 1399·2019-08-29 11:18