摘要:属性校验随着应用的增长,确保你的组件正确使用是有必要的。混入在当中,组件复用能够减少我们的代码量。官方举例说明的一种情况一个组件,每隔一段时间更新一次。提供了组件生命周期的方法告诉我们组件什么时候被创建和销毁。
当我们在设计接口的时候,将一些常见的设计元素(如按钮、表单、布局等)拆分成有着良好接口的可重用的组件。这样的话,下次你构建UI的时候只要写少量的代码。
属性校验随着应用的增长,确保你的组件正确使用是有必要的。React允许我们指定propTypes。React.PropTypes声明了一系列的校验确保我们接收的数据是合法的。如果不合法的数据出现在属性当中,控制台会打印警告信息。下面是不同的校验类型:
</>复制代码
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的值没有被父组件指定时,将会使用这个默认值。
属性转移通过属性延伸的语法,可以快速的将组件属性添加到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")
);
需要注意的是,这种写法会添加所有的属性。当标签内容为空时,children也会被添加其中。上面的例子是一个很好的实践。
混入在React当中,组件复用能够减少我们的代码量。但有时候不同的组件之间可能会相同的功能点。这个通常被叫做Cross-cutting concern。React提供了混入来解决这个问题。
官方举例说明的一种情况:一个组件,每隔一段时间更新一次。很容易就想到使用setInterval(),当不需要的时候需要取消Interval。React提供了组件生命周期的方法告诉我们组件什么时候被创建和销毁。根据这些创建一个简单的混入:
</>复制代码
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")
);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91503.html
摘要:说的通俗点如果组件出现在了组件的方法中,那么组件就是所有者。所有者和被所有者关系是针对组件的,父子关系是针对结构的。子调节调节发生在更新的过程中。带有状态的子节点对大部分组件来说,问题不大。应该加在组件上,而不是标签上。 关注分离 我们在编程的时候碰到相同的功能,可以通过抽出公共方法或者类来实现复用。当我们构建新的组件的时候,尽量保持我们的组件同业务逻辑分离,将相同功能的组件抽出一个...
摘要:选择的主要原因大概是因为该框架出现较早,感觉上会相对成熟,日后学习中遇到问题想要查找答案相对简单一些,对,就是这么简单。多说无益,接下来开始的学习,我按照我学习中带着的问题来一一解答,完成我的入门笔记。主要是针对前端的组件化开发。 这两天得空,特意来折腾了以下时下火热的前端框架react,至于为什么选react,作为一个初学者react和vue在技术上的优劣我无权评论,也就不妄加评论了...
摘要:官方说法注本人英语二十六级是和用来创建用户界面的库。很多人将认为是中的。怎么说呢现在的自己就是个跟风狗啊,什么流行先学习了再说,再看看能不能应用在具体项目上。暂时先停下的学习,坐等。不过学习的脚步还是跟不上潮流的发展速度啊。 Why React? 官方说法 注:本人英语二十六级 React是Facebook和Instagram用来创建用户界面的JavaScript库。很多...
阅读 1523·2021-11-24 11:16
阅读 2745·2021-07-28 12:32
阅读 2332·2019-08-30 11:22
阅读 1468·2019-08-30 11:01
阅读 627·2019-08-29 16:24
阅读 3584·2019-08-29 12:52
阅读 1652·2019-08-29 12:15
阅读 1361·2019-08-29 11:18
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要