博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React 基础知识分享
阅读量:6482 次
发布时间:2019-06-23

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

React 入门基础

快速开始

因为 React 开发涉及 JSX 语法和ES6/7新语法还有开发环境和正式环境打包等等工作。建议新手可以使用 Facebook 官方推出的 快速开始学习基础知识和代码实践。等到实际项目开发时可以再深入的进行 webpack 定制化开发。

//全局安装  npm install -g create-react-app  //创建项目  create-react-app my-app  cd my-app  //运行  npm start  //测试  npm test  //打包  npm run build

局限性(不支持功能)

  • Server rendering. 服务器端渲染

  • Some experimental syntax extensions (e.g. decorators).一些实验性的语法(例如:修饰器)

  • CSS Modules.

  • LESS or Sass.

  • Hot reloading of components.热更新 本人自己开发的支持 redux hot reloading 项目

实际使用项目简介

改项目就是使用创建的一个项目。主要实现了官方 代码使用 ES5 Classes 方式来进行实现,可以进行一个比较。其中省略了服务器端数据请求的逻辑。

三种组件类型

React.createClass

import React, { Component } from 'react'var TickTock = React.createClass({  //类属性和方法的设置  statics: {    customMethod: function(foo) {      return foo === 'bar';    }    value: 0  },  //初始化 state 值  getInitialState: function() {    return {seconds: 0};  },  //定义 props 参数类型  propTypes: {    name: React.PropTypes.string  },  //设置 props 默认值  getDefaultProps: function() {    return {      name: 'Mary'    };  },  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.

); }});

ES6 Classes export class Name extends React.Component

import React, { Component, PropTypes } from 'react'export default class App extends Component{  //静态方法  static customMethod(foo){    return foo === 'bar';  }  constructor(){    super()    //初始化 state 值    this.state = {      data: []    }  }    handleCommentSubmit(comment) {    this.setState({      data: [...this.state.data, comment]    })  }  componentDidMount() {    setTimeout(()=>{      this.setState({        data: data      })    }, 3000)  }  render() {    return (      

Comments

); }}//定义 props 参数类型App.propTypes = { name: PropTypes.string};//设置 props 默认值App.defaultProps = { name: 'Mary'};//类属性App.value = 1

纯函数(pure funciton) stateless-functions

适用于无 state 的组件

function Greeting(props) {  return 

Hello, {props.name}

;}或者 ES6 箭头函数const Greeting = (props) => (

Hello, {props.name}

);ReactDOM.render(
, document.getElementById('example'));

参考链接:

自己总结的小知识点

className 和 style

render(){    return (      
) } render(){ const styleObj = { height: "100px", width: "100px", fontSize: "12px" } return (
) }

JXS 注释

render(){    return (      
{/* 这里面的内容都是注释 */}
) }

DOM 操作

export default class image extends Component {      constructor(props) {        super(props)      }      componentDidMount(){        //获取组件根 html DOM 元素对象        let dom = findDOMNode(this)      }      render() {        retrun       }  }

export default class Demo extends Component {      constructor(props) {        super(props)      }      componentDidMount(){        //这是该组件的根 DOM 对象        console.info(this.refs.comRootDom);        this._input.focus();      }      render() {        retrun (          
{/* ref 还支持函数形式,函数输入参数为 DOM 对象 */}
this._input = input} />
) } }

修改组件 state

要想修改 this.state 必须通过 this.setState 函数进行设置

constructor(){    super()    this.state = {      data: [],      counter: 0,      other: 1    }  }  onClick(){    //以下代码只会改版 this.state.counter 而不会影响 this.state.other 和 this.state.data    this.setState({counter: this.state.counter + 1;  }  render(){    

Comments

other {this.state.other}
counter = {this.state.counter}
}

JSX 语法不支持 IF-ELSE 使用三元运算符或者使用变量独立处理

JSX 中使用三元运算符

render(){    return (      
{ this.state.isShow ?
show Text : "" }
) }

使用变量独立处理

render(){    let content = "";    if(this.state.isShow){      content = show Text    }    return (      
{content}
) }

生命周期

对于生命周期的理解很重要,生命周期贯彻 react 组件的整个使用过程

网络图片未找到出处,如有侵权请联系我删除该图片

Mounting: componentWillMount

可以在这个函数中发情数据请求,此时进行 setState() render() 将只执行一次

Mounting: componentDidMount

第一次 render() 执行后,此时可以读取对真实DOM进行相关操作

Updating: componentWillReceiveProps(nextProps)

当组件 props 修改(即父组件传递参数变化),在第一次 render() 过程中不执行此函数

变量 说明
this.props 老的 props
nextProps 新的 props

Updating: shouldComponentUpdate(nextProps, nextState)

如果配置该函数的话必须明确的返回 true 或者 false ,返回决定了本次变化是否引起组件重绘(及执行 render())。

在此函数中可以进行逻辑性的判断来减少组件重绘的次数

Updating: componentWillUpdate(nextProps, nextState)

请不要在此函数中执行修改 state 的逻辑(即调用 setState 函数),如有需要请在 componentWillReceiveProps 中进行修改设置

Updating: componentDidUpdate(prevProps, prevState)

完成组件更新(即完成本次更新重绘 render() 执行之后),此时可以进行 DOM 操作

Unmounting: componentWillUnmount

组件被销毁时调用,已经进行各种销毁逻辑

render()

必须返回唯一包裹组件

render(){    retrun (      
) } // good render(){ retrun (
{/* */} ) } // error render(){ retrun (
) } // error

参考链接:

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

你可能感兴趣的文章
演示:带时间ACL的配置
查看>>
1.05.体验-Cisco UC-基本功能 v1.1(请-下载-附件(百度云盘)! 有惊喜!)
查看>>
Setting Up Flume High Availability
查看>>
Java 8中用java.time.LocalDate全面代替老旧的Date,Calendar类
查看>>
cmd命令大全 新手入门
查看>>
ESXi 的Guest OS 如何从LUN上释放空间
查看>>
使用duplicate创建dataguard
查看>>
LVS+Keepalived相关参考资料
查看>>
Docker容器管理之Kubernetes
查看>>
Redis 3.0.1 安装和配置
查看>>
hadoop的一些配置结果截图
查看>>
产品经理利器之axure rp
查看>>
RedHat 6 配置iSCSI服务
查看>>
Oracle tablespace maxsize解析
查看>>
测试人员,你的价值不是你的工资
查看>>
实践无用论:這個"實踐"是動詞!!
查看>>
Puppet 条件判断语句(十六)
查看>>
使用haproxy-实现七层负载均衡
查看>>
windows系统 中 如何获取当前帐号的 SID 值
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>