博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React 开发你一定要知道
阅读量:5884 次
发布时间:2019-06-19

本文共 3982 字,大约阅读时间需要 13 分钟。

JSX 基本语法

1.定义标签时只允许被一个标签包裹const component = nameage2.标签一定要闭合3.DOM元素属性class和forclass属性改为className   
for属性改为htmlFor 4.自定义html属性,要使用data-前缀
5.属性值需要使用表达式,只要用{}替换""即可const person =
6.html转义React会将所有要显示到DOM的字符串转义,防止XSSreact提供了dangerouslySetInnerHTML属性,谨慎使用

React 数据流

在React中,数据是自顶向下单向流动的,即从父组件到子组件,这条原则让组件之间的关系变的简单且可预测。state和props是React组件中重要的概念,如果顶层组件初始化props,那么React会向下遍历整棵组件树,重新尝试渲染所有相关的子组件。而state只关心每个组件自己内部的状态,这些状态只能在组件内部改变,把组件看成一个函数,那么它接受了props作为参数,内部由state作为函数的内部参数,返回一个Virtual DOM的实现。

组件的state

组件的state是组件的内部状态,state的变化最终将反映到组建UI的变化,我们在组件的构造方法constructor中通过this.state定义组件的初始状态,并通过this.setState方法改变组件状态(也是改变组件状态的唯一方式),进而组件的UI也会随之重新渲染。

1.setState是一个异步方法,一个生命周期内所有的setState方法会合并操作。

组件的props

1.React的单向数据流,主要的流动管道就是props,props本身是不可变的。当我们试图改变props的原始值时,React会报出类型错误警告,组件的props一定来自于默认属性或者通过父组件传递而来。2.React为props同样提供了默认的配置。通过defaultProps静态变量的方式来定义,当组件被调用的时候,默认值保证渲染后始终有值。    static defaultProps = {        classPrefix: 'tabs',        onChange: () => {}        }    3.proTotypes用于规范props的类型与必需的状态。如果组件定义了propTypes,那么在开发环境下,就会对组件的props的值类型作检查。    static propTypes = {        classPrefix: propTypes.String    }    4.子组件的props,在React中有一个重要且内置的props---children,它代表组件的子组件集合,children可以根据传入子组件的数量来决定是否是数组类型。5.用function prop与父组件通讯,父组件可以通过子组件的prop传递给子组件一个回调函数,子组件需要改变父组件数据时,调用这个回调函数即可。

React生命周期

组件从创建到被销毁的过程称为组件的生命周期。通常,React组件的生命周期可以被分为三个阶段:挂载阶段、更新阶段、卸载阶段

1.挂载阶段

constructor这是es6 class的构造方法,组件被创建时,会首先调用组件的构造方法,这个构造方法接收一个props参数,props是父组件中传入的属性对象componentWillMount该方法在组件被挂载到DOM前调用,且只会被调用一次render这是定义组件时唯一必要的方法,该方法根据props和state返回一个react元素,这个元素用于描述组件的UI,注意render并不负责组件的实际渲染工作,它只是返回一个UI的描述,真正渲染出页面的DOM的工作有React负责。componentDidMount 组件被挂载到DOM后调用,且只会被调用一次

2.更新阶段

componentWillReceiveProps(nextProps)这个方法只在props引起的组件更新过程中,才会被调用。state引起的组件更新并不会触发该方法的执。shouldComponentUpdate(nextProps, nextState)这个方法决定组件是否继续执行更新过程,当方法返回true时(默认返回值),组件会继续更新过程。返回false时,组件更新过程停止。componentWillUpdate(nextProps, nextState)该方法在组件render调用前调用。render该方法根据props和state返回一个react元素,如挂载阶段componentDidUpdate(preProps, preState)组件更新后被调用,可以作为操作DOM的地方。两个参数分别是组件更新前的props和state

3.卸载阶段

componentWillUnmount组件被卸载之前调用,此处可以用于清除定时器等,取消监听事件等,避免引起内存泄露。

React refs

ref是react上的特殊属性

在常规的数据流之外强制修改子元素
被修改的可以是react组件实例,或者一个dom元素
可以在dom元素上和类组件上添加ref,react组件在加载时将dom元素传入ref的回调,在componentDidMount 或者componentDidUpdate 这些生命周期前执行。

1.dom元素上添加ref

...handleClick(){    this.nameInput.focus();}render(){    return(        
{this.nameInput = input;}}
);}

2.react组件上添加ref

// App.jsotherFunction(){    this.pager.changePage(5);}....render(){    return(        
{this.pager = page;}} /> );}// Pager.js...changePage(page){ this.setState({ page : page });}...// 在父组件中使用ref给某一子组件传值,并且子组件调用setState修改自身的状态,// 该子组件会重新渲染一次,父组件中的其他组件不会重新render

3.ref和函数式组件

function MyTest(){    let textInput = null;    function handleClick(){        textInput.focus();    }    return(){        
{textInput=input}/>
}}
  1. 子组件对父组件暴露dom节点

    // App.js
    ...
    render(){

    return(     this.inputRef = el; } />);

    }

    // Sub.js

    ...
    render(){

    return(){    
    }

    }

React forceUpdate

默认情况下,当组件的 state 或 props 改变时,组件将重新渲染。 如果你的 render() 方法依赖于一些其他数据,你可以告诉 React 组件需要通过调用 forceUpdate() 重新渲染。

调用 forceUpdate() 会导致组件跳过 shouldComponentUpdate() ,直接调用 render()。 这将触发子组件的正常生命周期方法,包括每个子组件的 shouldComponentUpdate() 方法。
forceUpdate就是重新render。有些变量不在state上,但是你又想达到这个变量更新的时候,刷新render;或者state里的某个变量层次太深,更新的时候没有自动触发render。这些时候都可以手动调用forceUpdate自动触发render

// Sub.jsclass Sub extends React.Component{    construcotr(){        super();        this.name = "tom";    }    refChangeName(name){        this.name = name;        this.forceUpdate();     }    render(){        return (
{this.name}
); }}// App.jsclass App extends React.Component{ handleClick(){ this.subRef.refChangeName("jack"); } render(){ return (
{this.subRef = sub;}} />
); }}

转载地址:http://drlix.baihongyu.com/

你可能感兴趣的文章
4.2. PHP crypt()
查看>>
开发进度——4
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
js判断checkbox是否选中
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
MySQL查询优化
查看>>
android app启动过程(转)
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
关于浏览器的cookie
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>