React从开始搭建到项目部署到服务器

    xiaoxiao2022-07-05  192

    导语

    什么是React?Vue跟React相比的区别是哪些?为什么大厂都会选择React?

    区别

    设计模式 React采用的是MVC模式(严格的view层);Vue采用的是MVVM模式; 组件写法不同; react主张jsx+inline style,也就是讲HTML、css写到js中,一切皆js,vue则是webpack+Vue-loader的单文件组件格式,即HTML、css、js组成一个文件形成.vue文件 数据绑定 两者都是单向数据流,但是Vue可以进行双向数据绑定,React也可以进行双向数据绑定,但是绑定的原理有些区别,React是通过setState与View层进行双向数据绑定达到实时更新变化 Vitual Dom 不一样; Vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树,而react每当应用的状态被改变时,全部组件都会被渲染,所以react需要shouldComponentUpdate这个生命周期函数方法来进行控制

    注: 关于vue的数据双向绑定和单向数据流

    Vue 的依赖追踪是【原理上不支持双向绑定,v-model 只是通过监听 DOM 事件实现的语法糖】vue的依赖追踪是通过 Object.defineProperty 把data对象的属性全部转为 getter/setter来实现的;当改变数据的某个属性值时,会触发set函数,获取该属性值的时候会触发get函数,通过这个特性来实现改变数据时改变视图;也就是说只有当数据改变时才会触发视图的改变,反过来在操作视图时,只能通过DOM事件来改变数据,再由此来改变视图,以此来实现双向绑定双向绑定是在同一个组件内,将数据和视图绑定起来,和父子组件之间的通信并无什么关联;组件之间的通信采用单向数据流是为了组件间更好的解耦,在开发中可能有多个子组件依赖于父组件的某个数据,假如子组件可以修改父组件数据的话,一个子组件变化会引发所有依赖这个数据的子组件发生变化,所以vue不推荐子组件修改父组件的数据,直接修改props会抛出警告

    React

    搭建React

    安装create-react-app npm isntall -g create-react-app 查看版本 create-react-app --version 创建项目目录 安装完成之后(红线标识的是运行的时候的默认配置) 运行yarn start 自动运行浏览器,打开localhost:3000页面

    运行默认配置

    打开项目代码,其中package.json中script标签的eject命令是默认安装webpack等一些基础的配置

    会增加一个scripts文件夹和一个config文件夹存放一些配置文件

    Config for yourself

    项目目录地址: 码云:https://gitee.com/houchaowei/flash.git

    按照vue的开发习惯配置了一些简单的目录没有加redux,加了MOBX

    服务器端项目的部署

    首先安装nginx,npm,node,配置项目目录,配置nginx代理clone代码到项目目录 git clone https://houchaowei:**@gitee.com/houchaowei/flash.git

    解析一个二级域名,没有配置nginx代理的时候,访问不到的项目 nginx配置 项目目录下执行npm install & npm run build

    React示例:

    Demo

    index.js

    /** * index.js */ import React, { Component } from 'react' import { observer, inject } from 'mobx-react' import { Button, InputItem } from 'antd-mobile' @inject('store') @observer class Index extends Component { constructor(props) { super(props) this.state = { } } changeName = () => { this.props.store.setName('小吴') } render() { return ( <div> <InputItem value={this.props.store.name} type='primary'>姓名</InputItem> <Button onClick={this.changeName}>修改名字</Button> </div> ) } } export default Index

    store.js

    /** * store.js */ import {observable, action} from "mobx"; class CommonState { @observable name = '小红'; @action setName (name) { this.name = name; } } export default CommonState
    最新回复(0)