1. __dirname 总是指向被执行 js 文件的绝对路径,./ 会返回你执行 node 命令的路径,例如你的工作路径。
  2. path.join()方法可以连接任意多个路径字符串。要连接的多个路径可做为参数传入。path.join()方法在接边路径的同时也会对路径进行规范化。
  3. path.resolve()方法可以将多个路径解析为一个规范化的绝对路径。其处理方式类似于对这些路径逐一进行cd操作,与cd操作不同的是,这引起路径可以是文件,并且可不必实际存在(resolve()方法不会利用底层的文件系统判断路径是否存在,而只是进行路径字符串操作)。
  4. config.devtool 选择方案config.devtool
  5. webpack2.x 中过滤错误new webpack.NoErrorsPlugin()在4.x中需要使用new webpack.NoEmitOnErrorsPlugin()
  6. webpack4 中的babel配置需要
    "@babel/cli": “^7.4.3”,
    “@babel/core”: “^7.4.3”,
    “@babel/preset-env”: “^7.4.3”,
    “@babel/preset-react”: “^7.0.0”,
    “babel-loader”: “^8.0.5”
  7. wepack4 自带代码分割功能 new webpack.optimize.CommonsChunkPlugin()此处需要注释
  8. react16.x Version 中使用上下文context的方法是:
    export const {Provider,Consumer} = React.createContext();
    <Provider value="dark">
    <Header />
    </Provider>
    import { Consumer } from '@/router/Root'
    <Consumer>{
    ( name ) =>
    <div style={{ border: '1px solid blue', width: '60%', margin: '20px auto', textAlign: 'center' }}>
    <p>子组件/获取父组件的值:{name}</p>
    </div>
    }</Consumer>
  9. react16.x Version 中 react 自定义redux实现流程:
    // CreateStore
    function createStore(reducer, initialState = {}) {
    // currentState就是那个数据
    let currentState = initialState;
    let listener = () => { }; function getState() {
    return currentState;
    }
    function dispatch(action) {
    console.log(action)
    currentState = reducer(currentState, action); // 更新数据
    listener(currentState); // 执行订阅函数
    return action;
    }
    function subscribe(newListener) {
    listener = newListener;
    // 取消订阅函数
    return function unsubscribe() {
    listener = () => { };
    };
    }
    return {
    getState,
    dispatch,
    subscribe
    };
    }
    // store && reducer
    const store = createStore(function(state={}, action) {
    switch (action.type){
    case 'update':
    return {...state, ...action.data}
    default:
    return state
    }
    });
    // entry 入口
    export default class Root extends Component {
    render() {
    return (
    <Provider value={store}>
    <Route path="/" component={Header} />
    </Provider>
    )
    }
    }
    // Connect
    export default function connect(mapStateToProps, mapDispatchToProps) {
    return function (WrappedComponent) {
    class Connect extends React.Component {
    constructor(props) {
    super(props)
    this.store = {}
    this.handleStoreChange.bind(this)
    }
    componentDidMount() {
    // 组件加载完成后订阅store变化,如果store有变化则更新UI
    this.unsubscribe = this.store.subscribe(this.handleStoreChange);
    }
    componentWillUnmount() {
    // 组件销毁后,取消订阅事件
    this.unsubscribe();
    }
    handleStoreChange(storeVal) {
    // 更新之后的storeVal
    console.log(storeVal)
    // 更新UI
    this.forceUpdate();
    }
    render() {
    return (
    <Consumer>{
    ( store ) => {
    this.store = store;
    return <WrappedComponent
    {...this.props}
    {...mapStateToProps(store.getState())} // 参数是store里面的数据
    {...mapDispatchToProps(store.dispatch)} // 参数是store.dispatch
    />
    }
    }</Consumer>
    );
    }
    }
    Connect.contextTypes = {
    store: PropTypes.object
    };
    return Connect;
    };
    }
    // Children || Grandson
    function mapStateToProps(state) {
    return {
    }
    } function mapDispatchToProps(dispatch) {
    return {
    updateStore: function(data) {
    console.log(data)
    dispatch({type: 'update', data})
    }
    }
    } const Header = connect(
    mapStateToProps,
    mapDispatchToProps
    )(_Header);
  10. 使用resolutions可以统一依赖包所引入的控件版本!
    "resolutions": {
    "antd/moment": "2.18.1",
    "rc-calendar/moment": "2.18.1",
    "rc-time-picker/moment": "2.18.1"
    }
  11. 在react、redux、react-router中使用react-router-redux集中管理路由的时候在react-router4.x以及更新的版本中不推荐使用react-router-redux(按照官方案例会报错Uncaught TypeError: Cannot read property ‘dispatch’ of undefined、at ConnectedRouter._this.handleLocationChange) 此处改用connected-react-router。
  12. react中可以从React引入Fragment来代替外层元素又或者可以使用数组进行return元素来带到去除多余的div效果。
  13. react中由于逻辑问题产生重复setState同一个值只会执行后一个,如果需要使用同步写法,可以采用函数式传参、回调、setTimeout加入队列的设置方法使它同步执行。
  14. react-router4 中如果要使用内嵌route来引入界面且需要传参的话可以使用render来传入自定义组件。
  15. 若想在jsx语法中使用style样式可引入styled-jsx来实现。

React Mobile 搭建记录的更多相关文章

  1. faster-rcnn(testing): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+opencv3.0+matlabR2014a环境搭建记录

    python版本的faster-rcnn见我的另一篇博客: py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3 ...

  2. py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录

    第一次写博客,以此纪念这几天安装caffe,跑faster-rcnn的血泪史.在此特别感谢网络各路大神,来自全球各地,让我能从中汲取营养,吸取经验,总结规律. faster-rcnn分为matlab版 ...

  3. 转载:用Dreamweave cs 5.5+PhoneGap+Jquery Mobile搭建移动开发

    转载地址:http://blog.csdn.net/haha_mingg/article/details/7900221 移动设备应用开发有多难,只要学会HTML5+Javascript就可以.用Dr ...

  4. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  5. 生产apollo搭建记录(五)

    1. 生产apollo搭建记录(五) 1.1. 目标   搭建两个环境配置,dev和pro,但目前可用服务器限制,打算mysql用同一个,服务器分生产和测试 1.2. 数据库 建三个库 注意注意:在启 ...

  6. React性能优化记录(不定期更新)

    React性能优化记录(不定期更新) 1. 使用PureComponent代替Component 在新建组件的时候需要继承Component会用到以下代码 import React,{Componen ...

  7. 12.2RAC搭建记录

    12.2RAC环境搭建记录 安装前资源检查 资源限制要求/etc/security/limits.conf Table 6-1 Installation Owner Resource Limit Re ...

  8. RobotFramework测试环境搭建记录

    Robotframwork测试环境搭建记录 1.安装Python2.7(https://www.python.org/) 在环境变量path中加入“C:\Python27” 安装后的验证方法为在命令行 ...

  9. 一、React Native 搭建开发环境(1)(Mac OS - IOS项目篇)

    React Native是Facebook推出的一个开发IOS和安卓APP的技术.至于更多的详情,这里不再描述,大家可以自行百度它的定义. 原因:由于我想在一台电脑上同时开发IOS和Android两个 ...

随机推荐

  1. Ubuntu 18.04中的Vim编辑器的高级配置

    VIM (Unix及类Unix系统文本编辑器) Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是开源软件. Vim普遍被推崇为类Vi编辑器中 ...

  2. More Effective C++: 06杂项讨论

    32:在未来时态下发展程序 世事永远在变,好的软件对于变化有良好的适应能力:可以容纳新的性质,可以移植到新的平台,可以适应新的需求,可以掌握新的输入.所谓在未来时态下设计程序,就是接受“事情总会改变” ...

  3. shell学习(22)- comm

    1.预备知识 comm命令可用于比较两个已排序的文件.它可以显示出第一个文件和第二个文件所独有的行以及这两个文件所共有的行.该命令有一些选项可以禁止显示指定的列,以便于执行交集和求差操作. 交集(in ...

  4. Python里的堆heapq

    实际上,Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块.这个模块名为heapq(其中的q表示队列),默认为小顶堆.Python中没有大顶堆的实现. 常用的函数 函 数 描 述 hea ...

  5. 登录注册beta版

    注册 login_count = 0 username_inp = input('请输入用户名:') while login_count < 3: pwd_inp = input('请输入密码: ...

  6. CSDN编程挑战——《-3+1》

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/user_longling/article/details/24674033 -3+1 题目详情: 有 ...

  7. HZOJ 毛一琛

    直接暴搜是$3^n$的,无法接受. 正解是$meet \ in \ the \ middle$,暴搜前n/2个数,每个数的状态有三种:都不选,选为A集合,选为B集合.那么我们可以维护两个集合的差. 设 ...

  8. LeetCode91 Decode Ways

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  9. PostgreSQL重新读取pg_hba.conf文件

    PostgreSQL  配置文件之pg_hba.conf 该文件用于控制访问安全性,管理客户端对于PostgreSQL服务器的访问权限,内容包括:允许哪些用户连接到哪个数据库,允许哪些IP或者哪个网段 ...

  10. 14 个你可能不知道的 JavaScript 调试技巧

    了解你的工具可以极大的帮助你完成任务.尽管 JavaScript 的调试非常麻烦,但在掌握了技巧 (tricks) 的情况下,你依然可以用尽量少的的时间解决这些错误 (errors) 和问题 (bug ...