回顾Javascript React基础
前端  /  管理员 发布于 4年前   231
前言
React核心的单向数据流、一切皆数据的state、不会改变的props,以及状态提升等等经常使用便不多总结,需要的看官方文档。
JSX
JSX 本质只是为 React.createElement(component, props, ...children)提供的语法糖!
以下两段代码等价(许多react的界面设计器通过这个原理,达到元数据转化React元素,实现界面化编程!)
嵌套就是多个create方法的嵌套。
function hello() {returnHello,world!;}"use strict";function hello() {return React.createElement("div",{ className: "red" },"Hello,",React.createElement("span",null,"world!"));}
- 3.JSX中的属性是可以任何 {} 包裹的 JavaScript 表达式作为一个属性值,不能使用if和for。
需要循环和条件渲染可以使用map、三目,或者使用if/for在jsx代码之外!
//错误的!class A extends React.Component {render() {return {if(){}else{}};//原来还蒙蔽的不知道为什么错了0.0}}React.Component (组件)
创建组件的四种方式:
React.Component 方式
class Greeting extends React.Component {render() {returnHello, {this.props.name}
;}}ES5
var createReactClass = require('create-react-class');var Greeting = createReactClass({render: function() {returnHello, {this.props.name}
;}});//或者使用reactvar Greeting = React.create({render: function() {returnHello, {this.props.name}
;}});函数式
const Button = ({day,increment}) => {return ()}PureComponet
大多数情况下, 我们使用PureComponent能够简化我们的代码,并且提高性能,但是PureComponent的自动为我们添加的shouldComponentUpate函数,只是对props和state进行浅比较(shadow comparison),当props或者state本身是嵌套对象或数组等时,浅比较并不能得到预期的结果,这会导致实际的props和state发生了变化,但组件却没有更新的问题。当然还是有解决的方法的,所以建议还是少用。
事件处理
事件绑定的四种方法:推荐使用第一第二种。
class Toggle extends React.Component {constructor(props) {{...}//方法一必须在这里绑定this.handleClick1 = this.handleClick.bind(this);}handleClick1() {this...}//方法二使用【属性初始化器语法】【需要开启babel stage-0以上】handleClick2=()=> {this...}render() {return (//方法三在使用时绑定//方法四在回调函数中使用 箭头函数/**渲染的时候都会创建一个不同的回调函数。在大多数情况下,这没有问题。然而如果这个回调函数作为一个属性值传入低阶组件,这些组件可能会进行额外的重新渲染。我们通常建议在构造函数中绑定或使用属性初始化器语法来避免这类性能问题。**/);}}组合 vs 继承
在React中不推荐使用继承,不推荐继承自定义Component。
//不推荐使用class Parent extends React.Component {render() {return ...;}}class A extends Parent {render() {return ...;}}//推荐使用class A extends React.Component {render() {return... ;}}不使用 ES6
- Component || create
- defaultProps || getDefaultProps
- constructor state || getInitialState
- this bind || 不需要
class Greeting extends React.Component {constructor(props) {super(props);this.state = {count: props.initialCount};this.handleClick = this.handleClick.bind(this);}handleClick() {alert(this.state.message);}render() {returnHello, {this.props.name}
;}}Greeting.defaultProps = {name: 'Mary'};var createReactClass = require('create-react-class');var Greeting = createReactClass({getInitialState: function() {return {count: this.props.initialCount};},getDefaultProps: function() {return {name: 'Mary'};},handleClick: function() {alert(this.state.message);},render: function() {//组件中的方法会自动绑定至实例,不需要像上面那样加 .bind(this)returnHello, {this.props.name}
;}});Refs
1.如果可以通过声明式实现,则尽量避免使用 refs。
2.不能在函数式组件上使用 ref 属性,因为它们没有实例
3.旧版 API:String 类型的 Refs,存在问题,可能会在未来移除,不推荐使用。
4.对父组件暴露refs,在父元素拿子元素
function CustomTextInput(props) {return ();}class Parent extends React.Component {//this.inputElement 就是CustomTextInput中的inputrender() {return (this.inputElement = el}/>);}} ReactDOM
获取一个DOM除了refs还有更加简单粗暴的方法findDOMNode。
findDOMNode 是用于操作底层DOM节点的备用方案。使用它的优先级比refs更低!!
findDOMNode 只对挂载过的组件有效。
findDOMNode 不能用于函数式的组件中。
import ReactDOM from 'react-dom';ReactDOM.render(element,container,[callback]//不为人知的第三个参数!!)ReactDOM.unmountComponentAtNode(container)ReactDOM.findDOMNode(component)不常用的新发现
- 空的 JSX 标签Fragments <>>或者
- 与运算符 && true && expression 总是返回 expression,而 false && expression 总是返回 false。
- 阻止组件渲染常用null组件的 render 方法返回 null 并不会影响该组件生命周期方法的回调。例如,componentWillUpdate 和 componentDidUpdate 依然可以被调用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
您可能感兴趣的文章:
- js经验分享 JavaScript反调试技巧
- 9种使用Chrome Firefox 自带调试工具调试javascript技巧
- Chrome调试折腾记之JS断点调试技巧
- JavaScript调试之console.log调试的一个小技巧分享
- Javascript调试之console对象――你不知道的一些小技巧
- 概述javascript在Google IE中的调试技巧
- JavaScript的兼容性与调试技巧
- 必备的JS调试技巧汇总
- JavaScript的React Web库的理念剖析及基础上手指南
- React Native基础入门之初步使用Flexbox布局
- React Native基础入门之调试React Native应用的一小步
- react以create-react-app为基础创建项目
- 浅谈react+es6+webpack的基础配置
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号