前端开发之React组件化知识
来源:互联网 发布:漫威宇宙实力排行知乎 编辑:程序博客网 时间:2024/05/01 03:43
前端开发之React组件化知识
最近公司开发一个项目用的React自己学习了一下,顺便就整理出来。
基于组件的开发是React三大理念之一。通过组件的组合,去构建更复杂的UI。 组件是由元素组成的,定义组件的语法叫JSX。
以往的前端开发中,有”画面/页面”的概念,衡量一个系统规模时,可以说这个系统有1000个页面。 在组件化开发中,可以理解为一个页面由多个组件构成,一个组件由任意多元素构成。组件可以嵌套。 组件由属性(Props), 状态(State)和事件组成。有自己的生命周期。
一个简单例子:
class HelloMessage extends React.Component { render() { return <div>Hello {this.props.name}</div>; }}ReactDOM.render(<HelloMessage name="John" />, mountNode);
定义组件的两种方法
函数组件
function Welcome(props) { return <h1>Hello, {props.name}</h1>;}
类组件
class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; }}
如何判断,什么场景定使用函数定义或者类定义?
如果一个组件不需要修改自己的属性时,定义为函数组件,否则类组件。
属性和状态(Prop, State)
属性一般都是从调用它的组件中传入的。组件内部不会改变属性值。 状态是组件内部私有的,组件自己完全控制的。 属性和状态都可以是一个值,或者对象,或者数组等。区别是属性值是别人的,状态值是自己管理的。
属性的类型检查和默认值
class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); }}// 属性类型检查Greeting.propTypes = { name: React.PropTypes.string};// 属性默认值Greeting.defaultProps = { name: 'Stranger'};
状态的三个注意点
- 不能直接修改状态的值
// Wrongthis.state.comment = 'Hello';// Correctthis.setState({comment: 'Hello'});
- 状态值的修改可能是异步的
// Wrongthis.setState({ counter: this.state.counter + this.props.increment,});// Correctthis.setState((prevState, props) => ({ counter: prevState.counter + props.increment}));
- state updates are Merged
事件
组件的事件类似HTML标签的事件,只是命名采用小驼峰。
// html<button onclick="activateLasers()"> Activate Lasers</button>
// React<button onClick={activateLasers}> Activate Lasers</button>
在React中,不能用return false来阻止事件的默认行为。必须用preventDefault
// html<a href="#" onclick="console.log('The link was clicked.'); return false"> Click me</a>
// Reactfunction ActionLink() { function handleClick(e) { e.preventDefault(); console.log('The link was clicked.'); } return ( <a href="#" onClick={handleClick}> Click me </a> );}
组件生命周期
组件从创建到显示的过程
- constructor()
- componentWillMount()
- render()
- componentDidMount()
组件的更新过程
- componentWillReceiveProps()
- shouldComponentUpdate()
- componentWillUpdate()
- render()
componentDidUpdate()
组件销毁
componentWillUnmount()
最后奉上React支持的事件链接 React支持的事件
2 0
- 前端开发之React组件化知识
- 前端开发之React组件生命周期
- 前端之React实战-组件
- 使用 webpack + react + redux + es6 开发组件化前端项目
- 使用 webpack + react + redux + es6 开发组件化前端项目
- 使用 webpack + react + redux + es6 开发组件化前端项目
- 使用 webpack + react + redux + es6 开发组件化前端项目
- 使用 webpack + react + redux + es6 开发组件化前端项目
- webpack + react + redux + es6 开发组件化前端项目
- React Native 之 组件化开发
- 前端组件化开发
- React组件化开发之页面构建、数据流向
- 前端组件化开发方案及其在React Native中的运用
- React-redux开发之echarts组件封装
- 前端组件化开发实践
- 前端组件化开发实践
- 前端组件化开发实践
- 前端模块化、组件化开发
- HDU 1556 Color the ball(线段树区间更新区间查询模板)
- Android动画--属性动画
- LintCode解题记录 17.5.3
- linux防火墙设置相关
- 交换机和路由器之间有什么区别?
- 前端开发之React组件化知识
- h5中的表格
- 设计模式初学
- SQL关于视图
- 单例模式
- 【caffe-Windows】mnist实例编译之model的生成(2016-06-27)(原文评论可参考)
- Swat.io如何在两年内从MySQL迁移到PostgreSQL的
- 代理模式 简单理解
- javascript中工厂方法模式祥解(Factory method pattern)