react

前端组件化-高质高效协作利器

删除回忆录丶 提交于 2020-03-09 16:36:21
小编寄语 在这个“不出门就是给国家做贡献”的日子里,技术委员会提前祝大家元宵节快乐,祝我们的生活像汤圆一样甜蜜圆满。也请伙伴们少出门,勤洗手,戴口罩,为自己和家人的健康保驾护航,同心协力,共克时艰!我们相信阳光会驱散阴霾,一切都会好起来的! 小编今天分享一篇由家长帮倪思远老师带来的技术好文《前端组件化-高质高效协作利器》,本文主要介绍了作者对于组件化的理解以及组内是如何实现组件化的,希望能够对大家有所启发和帮助~ 前言 项目开发过程中,随着业务的不断迭代,很容易暴露以下问题: 1、代码体积会不断增加,代码的冗余会越来越大; 2、业务逻辑复杂度会不断增加,逻辑的可拓展性、可维护性越来越脆弱; 问题的主要原因在于: 1、功能代码的复用方式是简单粗暴拷贝和粘贴; 2、多人协作导致代码耦合度高,后期维护拓展方式不合理; 针对以上问题,在前端项目工程化的基础上,引入前端组件化,从功能模块的复用、通信,及多人协作的层面进行解耦。 预期效果: 1.通过组件化的编码,实现功能的封装和复用,减少冗余 2.通过组件化的协作,实现功能和业务的解耦,高效协作 一.什么是前端组件化? 前端组件化以前经历的过程:面向过程–面向对象–面向模块。 前端业务复杂度的不断提升,传统的以HTML+JQ为主的面向过程的开发方式已经很难满足大型项目的迭代和维护。面向对象方式(继承、封装、多态、实例化构造)、借助模块化加载器

react withRouter

爷,独闯天下 提交于 2020-03-09 12:43:36
高阶组件中的 withRouter , 作用是将一个组件包裹进 Route 里面, 然后 react-router 的三个对象 history, location, match 就会被放进这个组件的 props 属性中. 1 import React from 'react' 2 import './nav.css' 3 import { 4 NavLink, 5 withRouter 6 } from "react-router-dom" 7 8 class Nav extends React.Component{ 9 handleClick = () => { 10 // Route 的 三个对象将会被放进来, 对象里面的方法可以被调用 11 console.log(this.props); 12 } 13 render() { 14 return ( 15 <div className={'nav'}> 16 <span className={'logo'} onClick={this.handleClick}>博客园</span> 17 <li><NavLink to="/" exact>随笔</NavLink></li> 18 <li><NavLink to="/activities">文章</NavLink></li> 19 <li><NavLink to="

react项目中使用less

末鹿安然 提交于 2020-03-09 11:49:42
1. 安装配置 npm i -D less less-loader 2. 查看webpack配置 npm run eject 此操作不可逆,生成新的目录。 3. 修改其中的webpack.config.js文件 来源: https://www.cnblogs.com/ceceliahappycoding/p/12447427.html

React项目打包布署

孤者浪人 提交于 2020-03-08 22:01:38
1、打包 在项目目录下,运行npm run build,进行打包,打包完成后会在目录下生成一个build文件夹,build生成的东西要放在服务器root下。 2、部署 打包之前,package.json文件中要增加一个homepage字段: "homepage": ".", 布署的时候你必须把build里的文件直接放到服务器上,假如你的服务器IP是xx.xx.xx.xx,服务器端口为8080,你应该保证http://xx.xx.xx.xx:8080这种访问方式访问到的是你的build下的文件。 来源: https://www.cnblogs.com/samve/p/12445110.html

react生命周期

有些话、适合烂在心里 提交于 2020-03-08 21:00:03
1、初始化 getDefaultProps() 设置默认的props,也可以用dufaultProps设置组件的默认属性。 getInitialState() 在使用es6的class语法时是没有这个钩子函数的,可以直接在constructor中定义this.state。 此时可以访问this.props componentWillMount() 在组件初始化时调用(渲染前),以后更新都不调用,整个生命周期只调用一次 此时可以修改state。 render() componentDidMount() 渲染后调用,只调用一次。 此时可以使用this.getDOMNode()。 2、更新 componentWillReceiveProps(nextProps) 接收新的props时调用,初始化时不调用。 shouldComponentUpdate(nextProps, nextState) 接收新的props或者state时被调用。初始化时或者使用forceUpdate时不调用 需要返回一个布尔值 可以在此对比前后两个props和state是否相同,如果相同则返回false阻止更新 componentWillUpdate(nextProps, nextState) 新一轮更新前调用,在初始化时不会被调用 此时可以修改state: nextState.name = '你想要更改的值’

【react】---17新增的生命周期

家住魔仙堡 提交于 2020-03-08 20:58:32
一、废除的生命周期   官网文档指出使用这些生命周期的代码会在未来版本的react中更容易产生 bug ,尤其是对于异步渲染的版本   由于未来采用异步渲染机制,所以即将在17版本中去掉的生命周期钩子函数   componentWillMount   componentWillRecieveProps   componentWIllUpdate 二、新增的生命周期      static getDerivedStateFromProps(nextProps, prevState) {}          用于替换componentWillReceiveProps,可以用来控制 props 更新 state 的过程;它返回一个对象表示新的 state;如果不需要更新,返回 null 即可   在每次渲染之前都会调用,不管初始挂载还是后面的更新都会调用,这一点和 componentWillReceiveProps 不同(只有当父组件造成重新渲染时才调用   简单的理解就说从props中获取state,这个生命周期的功能实际上就是将 传入的props映射到state上面    getDerivedStateFromProps 是一个静态函数,也就是这个函数不能通过this访问到class的属性,也并不推荐直接访问属性

在Vue中实现随hash改变响应菜单高亮

走远了吗. 提交于 2020-03-08 20:37:39
情景 Vue+Element 实现管理页面菜单栏, 点击菜单时 router 改变 hash 访问不同子组件。 但是改变 hash 时菜单栏展开状态和 highlight 并不会同步, 需要手动实现。 Try Try See 第一反应是通过 onhashchange 监听 hash 的变化, 将 location.hash.slice(2) 推给 menu 的 default-active 即可。 此时通过手动输入 url 或者前进后退时均可正常加载对应状态,但是通过组件中的 link 访问时,menu 的状态没有改变。 加入 alert 验证发现没有触发 hashchange。 Why Seafault 的解释是 Vue-Router 底层调用的是 history.pushState 查阅 MDN 发现 注意 pushState() 绝对不会触发 hashchange 事件,即使新的 URL 与旧的 URL 仅哈希不同也是如此。 Solution Vue-Router 的文档中给出两个方案 watch $route 对象 const User = { template: '...', watch: { $route(to, from) { // react to route changes... } } } 使用 beforeRouteUpdate const User = {

React Native 底部导航栏

梦想的初衷 提交于 2020-03-08 20:32:57
首先安装:npm install react- native-tab-navigator      然后再引入文件中      import TabNavigator from 'react-native-tab-navigator'; 举例如下:      import React, {Component} from 'react'; import {StyleSheet, View,Text,Image} from 'react-native'; import TabNavigator from 'react-native-tab-navigator' export default class App extends Component<Props> { /*初始化state*/ constructor(props){ super(); this.state={ selectedTab:'tb_msg', } } /** * 公共组件方法 * @param selectedTab 选中的tab * @param title * @param icon * @param selectedIcon * @param imageStyle 选中时渲染图标的颜色 * @param mark 角标 * @param viewContent 页面内容 * @returns {*} */

十分钟用 Node 命令行工具打造 react-cli 脚手架

蹲街弑〆低调 提交于 2020-03-08 16:13:19
如果你有以下想法: 每次新开项目需要copy一堆文件/文件夹,太烦!想要快速建立工程 用了vue-cli、react-app,羡慕!想要自己做一个 你只需花十分钟时间,做一个Node命令行工具,打造属于自己的脚手架。使用 react-cli my-project 命令,便可生成一套完整的项目结构。 功能概览 node 命令行编写范式 创建项目工程 发布到 npm 仓库 优化和更新 假设当前工程目录为: E:\demo ,不特殊说明,所有操作都在当前目录中执行。 一、简单 node 命令行 1、初始化项目 npm init 执行上面的命令,自动生成 package.json 文件, 详见 ,项目名字就叫 react-cli 。 2、创建运行命令的脚本 bin/index.js #! /user/bin/env node console.log('Hello node cli'); 然后在控制台中执行 node bin/index.js 就会输出 Hello node cli 3、链接到npm 在已经创建好的 package.json 文件中加入下面的字段: ... "bin": { "react-cli": "./bin/index" } ... package.json中有一个"bin"字段,配置后才可以在控制台使用你的命令。 4、全局安装你的包 要使 react-cli

vue和react的区别

梦想的初衷 提交于 2020-03-08 12:47:06
① React严格上只针对MVC的view层,Vue则是MVVM模式 ② virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时,全部组件都会重新渲染,所以react中会需要shouldComponentUpdate这个生命周期函数方法来进行控制 ③ 组件写法不一样, React推荐的做法是 JSX + inline style, 也就是把HTML和CSS全都写进JavaScript了,即'all in js'; Vue推荐的做法是webpack+vue-loader的单文件组件格式,即html,css,j 写在同一个文件; ④ 数据绑定: vue实现了数据的双向绑定,react数据流动是单向的 ⑤ state对象在react应用中不可变的,需要使用setState方法更新状态;在vue中,state对象不是必须的,数据由data属性在vue对象中管理 来源: oschina 链接: https://my.oschina.net/u/560237/blog/3189818