前端开发的演变

静态页面-AJAX-前端MVC-SPA

ReactJS

ReactJS把复杂的页面,拆分成一个个的组件,将这些组件一个个的拼装起来,就会呈现多样的页面。ReactJS可以用于 MVC 架构,也可以用于 MVVM 架构,或者别的架构

JSX语法

JSX语法就是,可以在js文件中插入html片段,是React自创的一种语法

在JSX语法中,只能有一个根标签,不能有多个

const div1 = <div>right</div>;const div2 = </div>error</div></div>error</div>;
<div>{f()}</div> // f是函数名

组件

import React from 'react';class HelloWorld extends React.Component{        render() { // 重写渲染方法        return <div>cxk:jntm</div>    }}export default HelloWorld; // 导出该类
import React from 'react';import HelloWorld from "./HelloWorld";class Show extends React.Component{        render() {        return <HelloWorld/>    }}export default Show;
// 属性传递              标签包裹传递<HelloWorld name="cxk"> 蔡徐坤</HelloWorld>// 接收<div>{this.props.name}:{this.props.children}</div>

每一个组件都有一个状态,其保存在this.state中,当状态值发生变化时,React框架会自动调用render()方法,重新渲染页面

class HelloWorld extends React.Component{    constructor(props, context) {        super(props, context);        this.state = {            dataList : [1,2,3]        };    }    render() { // 重写渲染方法        return <div>            <ul>                {                    this.state.dataList.map((value,index)=>{                      return <li>{value}</li>                    })                }            </ul>            <button onClick={()=>{                let list = this.state.dataList;                list.push(Math.random());                this.setState({dataList:list})            }}>click</button>        </div>    }}

添加钩子方法

class HelloWorld extends React.Component{    // 组件挂载后调用    componentDidMount() {        console.log("组件挂载后...");    }    // 省略其他}

前端代码分层

使用DVA进行数据分层管理

export default {    namespace : 'list',    state:{        data:[1,2,3]    }}
import React from 'react'import {connect} from 'dva'const namespace = 'list'const map = (state)=>{    const list = state[namespace].data;    return {        list    }};@connect(map)class List extends React.Component{    render() {        return <ul>            {                this.props.list.map((v,i)=>{                    return <li>{v}</li>                })            }        </ul>    }}export default List;
export default {    namespace: 'list',    state: {        data: [1, 2, 3]    }    ,    reducers: {        addNewData(state){            let list = [...state.data,Math.random()];            console.log(list);            return {                data:list            }        }    }}
// 省略导入// 省略map1const map1 = (dispatch)=>{    return {        addNewData:()=>{            dispatch(                {                    type:namespace+"/addNewData"                }            )        }    }}@connect(map,map1)class List extends React.Component{    render() {        return <ul>            {                this.props.list.map((v,i)=>{                    return <li>{v}</li>                })            }            <button onClick={()=>{                this.props.addNewData()            }}>                点击            </button>        </ul>    }}export default List;