关于React总结

在这里插入图片描述

一 :React 介绍

1.1:什么是react

react是用来构建用户界面的JavaScript库,vc很多人认为是react是MVC中的v(视图)。

1.2:React 的特点
  1. 高效
  2. 灵活
  3. Jsx
  4. 单项数据流
  5. 声明范式编写方式
  6. 组件化开发
1.3:React 的优点
  1. 它提高了应用的性能 可以方便地在客户端和服务器端使用 由于 JSX,代码的可读性很好 React很容易与 Meteor,Angular 等其他框架集成 使用React,编写UI测试用例变得非常容易。
  2. React组件化开发,使用ES6的语法来自定义复杂的标签(组件),很多实现某些功能的自定义组装在一起,就可以完成更复杂的UI界面

二:es6

2.1:let新特性

不存在变量提升
暂时性死区
不允许重复声明
块级作用域

2.2:const新特性

不存在变量提升
暂时性死区
不允许重复声明
块级作用域
声明的变量不允许重新赋值
声明必须有初始化值

2.2:let与const区别

Let: 不存在变量提升
不允许重复声明
块级作用域

三:组件的介绍

3.1:什么是组件

一个应用/版块/页面中用于实现某个局部的功能(包括html, js, css等)
把这些局部功能组装到一起,就形成组件

3.2:组件的类型

组件分为有状态组件和无状态组件 无状态组件就是函数组件 有状态组件是类组件 区别在于是否含有state属性 下面给大家详细介绍一下有状态组件

3.2.1:有状态组件(class组件)
//先引入react
import React, { Component } from 'react'
//声明一个类组件
export class Footer extends Component {
//重新渲染到页面
    render() {
    //返回值
        return (
            <div>
                
            </div>
        )
    }
}//class组件默认有state属性
//抛出
export default Footer
  • 在类组件中 声明变量时,要把所有的变量都放到state对象中

  • 放在state对象中 一是为了方便规范 ,二是标识符的规范 三是使用setstate实时更新数据

  • 类组件中声明的函数 this指向问题 可以用箭头函数解决 也可以用bind(this)

  • 操作渲染的DOM元素,使用ref属性 用this.refs.属性名 来获取值

3.2.2:无状态组件(函数组件)
//先引入react
import React, { Component } from 'react'
//声明一个函数组件
function  Footer(){
    render() {
    //返回值
        return (
            <div>
                
            </div>
        )
    }
}
//抛出
export default Footer;
3.3:组件之间的关系
  • 父子组件
  • 兄弟组件
3.4:组件之间的通信 传值
3.4.1 父传子

父组件 --> 子组件 props属性
F.js 调用了 S.js , S.js中的数据是由 F.js决定的 通过标签(组件)的属性传值
F.js 引入 S.js
class F{
<S 属性=值>
}
S.js {this.props.属性}

 父组件代码示例如下:

//父组件里面写的函数
// 类组件
// 先引入模块
import React from 'react';
import User from './User';
// 声明类
class Person extends React.Component{
// 重写渲染方法
render(){


return(
    <div className='div'>
        <div>hello  person</div>

<User str='1'></User>

    </div>
);
};
};
// 向外暴露
export default Person;

 子组件代码示例如下:

// 创建一个函数组件
// 首先引用react模块
import React from 'react';

// 声明函数
function User(props){
    return(
    <div><font>hello user</font>
   <p>
   {props.str}</p>
    </div>

)
}
export default User;
3.4.2 子传父

子组件 --> 父组件
1、在父组件中声明一个函数,用于接收子组件的传值
2、通过组件属性的方法,把函数传递给子组件
3、在子组件中通过props属性调用父组件的函数,并通过参数传值
4、在父组件中的函数通过形参接收子组件的传值

 父组件代码示例如下:

// 引用模块
import React from 'react';
import Son from './Son';
// 类函数 
class Father extends React.Component{
// 写一个构造方法
message(msg){
console.log(msg)
}
// 重写渲染方法
render(){

    return(
        <React.Fragment>
<Son mess='hello ' msg={this.message}></Son>
        </React.Fragment>
    )
}



}
export default Father;


 子组件代码示例如下:

import React from  'react';

class Son extends React.Component{
// 重新渲染页面
render(){
//返回值
return(
<React.Fragment>
<p>
{this.props.mess} ,
//传给父组件的值
{this.props.msg(123)}
</p>

</React.Fragment>

)

};



}
// 向外暴露
export default Son;
3.4.3. 兄弟传值

1、在父组件中声明一个函数,用于接收子组件的传值
2、通过组件属性的方法,把函数传递给子组件
3、在子组件中通过props属性调用父组件的函数,并通过参数传值
4、在父组件中的函数通过形参接收子组件的传值
5. 父组件再传给另一个儿子 通过构造方法 this.state接收 再用父传子的方法就可以了

 父组件代码示例如下:


import React from 'react';
import Son from './Son';
import Son2 from './Son2';

//父组件
class Father extends React.Component{

    constructor(){
        super();
        this.state = {
            message:''
        }
    }

    //用于接收Son.js组件的数据函数
    sonDatas(msg){
        this.setState({
            message:msg
        });
        console.log("在Father.js中展示Son.js生成的数据:"+msg);
    }

    render(){
        return (
            <React.Fragment>
             
               <h1>在Father组件中显示:</h1>
               <Son sondata={this.sonDatas.bind(this)}></Son>
               <Son2 mess={this.state.message}></Son2>
            </React.Fragment>
        );
    }

}

export default Father;


 子组件1代码示例如下:


import React from 'react';

//子组件
class Son extends React.Component{

    //按钮点击事件函数
    sonClick(){
        this.props.sondata('这是从Son.js中生成的数据。。。');
    }

    render(){
        return (
            <React.Fragment>
            
                <button onClick={this.sonClick.bind(this)}>Son组件中的按钮获取数据</button>
                    
            </React.Fragment>
        );
    }

}

export default Son;

 子组件2代码示例如下:


import React from 'react';

//子组件
class Son2 extends React.Component{

    render(){
        return (
            <React.Fragment>
            
                <h1>
                    在Son2.js中展示Son.js中生成的数据,这个是Father.js传过来的,数据是:
                    {this.props.mess}
                </h1>

            </React.Fragment>
        );
    }

}

export default Son2;

四 refs属性介绍

在React数据流中,父子组件唯一的交流方式是通过props属性;如果要修改子组件,通过修改父组件的属性,更新达到子组件props属性的值,重新渲染组件以达到视图的更新。但是,有些场景需要获取某一个真实的DOM元素来交互,比如文本框的聚焦、触发强制动画等

  • 给DOM元素添加ref属性
  • 给类组件添加ref属性

 子组件2代码示例如下:

import React from 'react';
import ReactDOM from 'react-dom';

class Person extends React.Component{

    constructor(){
        super();
        this.handleClick = this.handleClick.bind(this);
    }

    //点击事件
    handleClick(){
        // 使用原生的 DOM API 获取焦点
        this.refs.myInput.focus();
    }

    render(){
        return (
            <div>
                <input type="text" ref="myInput" />
                <input
                    type="button"
                    value="点我输入框获取焦点"
                    onClick={this.handleClick}/>
            </div>
        );    
    }
}

ReactDOM.render(<Person />, document.getElementById('root'));



五 :路由之间的跳转

5.1 安装react-router-dom

*要注意:以下所有操作均运行在搭好的React环境中

cnpm install react-router-dom -S
5.2 引入路由相关组件

引入内置组件

  • HashRouter表示一个路由的根容器,将来所有的路由相关的东西,都要包裹在HashRouter里面,而且一个网站中,只需要使用一次HashRouter就好了;
  • Route表示一个路由规则,在Route上,有两个比较重要的属性,path,component
  • Link表示一个路由的链接

代码示例如下:

import {HashRouter,Route,Link} from 'react-router-dom'
5.3嵌套路由
5.3.1 入口文件 代码示例:
import React from 'react';
//先引入要用到的路由 链接
import {HashRouter,Route,Link} from 'react-router-dom';
import News from './News'
//声明一个类组件
class App extends React.Component{
//从新渲染页面
render(){
return(
// 根容器
<HashRouter>
<div>

  <h2>我想吃肉</h2>
<hr />
{/* 链接 */}

<Link to='/News'>新闻</Link>&nbsp;&nbsp;
<Route path='/News' component={News}></Route>

</div>
</HashRouter>
)}

}
//向外暴露
export default App;


5.3.2 一级路由 代码示例:
//引入要用到的路由 链接
import React from 'react';
import Pig from './news/pig'
import {Route,Link} from 'react-router-dom';
//声明一个类组件
class News extends React.Component
{
//重新渲染页面
render(){

return(


<div>
//link里面的to指的是去某个页面 
<Link to='/news/pig'>你怕是个憨憨</Link>
//在这里的陆晶晶跳转的是news里面的pig组件  
<Route path='/news/pig' component={Pig}></Route>

</div>
)
}
}
//向外暴露
export default News;


5.3.3 二级路由 代码示例:

跳转到这个路由中
代码示例如下:

import React from 'react';
//声明一个类组件
class pig extends React.Component{
//重新渲染页面
render(){

return(
<div>哈哈哈哈哈</div>
)
}
}
//向外暴露
export default pig;

六 redux介绍

6.1什么是redux

Redux是一个流行的JavaScript框架,为应用程序提供一个可预测的状态容器。Redux基于简化版本的Flux框架,Flux是Facebook开发的一个框架。在标准的MVC框架中,数据可以在UI组件和存储之间双向流动,而Redux严格限制了数据只能在一个方向上流动

6.2:配置Redux
 npm install redux

创建store目录,在store目录下新建index.js文件,键入以下内容:

import {createStore} from 'redux';
import reducer from './reducer';

const store = createStore(reducer);

export default store;

在store目录下创建reducer.js文件,键入以下内容:

const defaultState = {
    inputValue:'',
    list:[]
}

//reducer可以接收state,但是不能修改state
export default (state = defaultState,action) => {
    return state;
}

在组件中就可以使用store的数据

import React,{Component} from 'react';
import store from './store/index';

class TodoList extends Component{

    constructor(props){
        super(props);
        this.state = store.getState();
        this.handleStoreChange = this.handleStoreChange.bind(this);
        store.subscribe(this.handleStoreChange);
    }
    
    handleStoreChange(){
        this.setState(store.getState());
    }

    render(){
        return (
            <div>
                <input type='text' value={this.state.inputValue}/>
                <button onClick={this.handleClick}>提交</button>
                <ul>
                    {this.state.list.map((item,index)=>{
                        return (
                            <li key={index}>{item}</li>
                        );
                    })}
                </ul>
            </div>
        );
    }
}

export default TodoList;

*结束了。。。看完了这些 你是否对react有了新的认识 加油哦

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值