React Mobile 搭建记录
- __dirname 总是指向被执行 js 文件的绝对路径,./ 会返回你执行 node 命令的路径,例如你的工作路径。
- path.join()方法可以连接任意多个路径字符串。要连接的多个路径可做为参数传入。path.join()方法在接边路径的同时也会对路径进行规范化。
- path.resolve()方法可以将多个路径解析为一个规范化的绝对路径。其处理方式类似于对这些路径逐一进行cd操作,与cd操作不同的是,这引起路径可以是文件,并且可不必实际存在(resolve()方法不会利用底层的文件系统判断路径是否存在,而只是进行路径字符串操作)。
- config.devtool 选择方案config.devtool
- webpack2.x 中过滤错误new webpack.NoErrorsPlugin()在4.x中需要使用new webpack.NoEmitOnErrorsPlugin()
- 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” - wepack4 自带代码分割功能 new webpack.optimize.CommonsChunkPlugin()此处需要注释
- 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> - 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); - 使用resolutions可以统一依赖包所引入的控件版本!
"resolutions": {
"antd/moment": "2.18.1",
"rc-calendar/moment": "2.18.1",
"rc-time-picker/moment": "2.18.1"
} - 在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。
- react中可以从React引入Fragment来代替外层元素又或者可以使用数组进行return元素来带到去除多余的div效果。
- react中由于逻辑问题产生重复setState同一个值只会执行后一个,如果需要使用同步写法,可以采用函数式传参、回调、setTimeout加入队列的设置方法使它同步执行。
- react-router4 中如果要使用内嵌route来引入界面且需要传参的话可以使用render来传入自定义组件。
- 若想在jsx语法中使用style样式可引入styled-jsx来实现。
React Mobile 搭建记录的更多相关文章
- 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 ...
- py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录
第一次写博客,以此纪念这几天安装caffe,跑faster-rcnn的血泪史.在此特别感谢网络各路大神,来自全球各地,让我能从中汲取营养,吸取经验,总结规律. faster-rcnn分为matlab版 ...
- 转载:用Dreamweave cs 5.5+PhoneGap+Jquery Mobile搭建移动开发
转载地址:http://blog.csdn.net/haha_mingg/article/details/7900221 移动设备应用开发有多难,只要学会HTML5+Javascript就可以.用Dr ...
- React项目搭建与部署
React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...
- 生产apollo搭建记录(五)
1. 生产apollo搭建记录(五) 1.1. 目标 搭建两个环境配置,dev和pro,但目前可用服务器限制,打算mysql用同一个,服务器分生产和测试 1.2. 数据库 建三个库 注意注意:在启 ...
- React性能优化记录(不定期更新)
React性能优化记录(不定期更新) 1. 使用PureComponent代替Component 在新建组件的时候需要继承Component会用到以下代码 import React,{Componen ...
- 12.2RAC搭建记录
12.2RAC环境搭建记录 安装前资源检查 资源限制要求/etc/security/limits.conf Table 6-1 Installation Owner Resource Limit Re ...
- RobotFramework测试环境搭建记录
Robotframwork测试环境搭建记录 1.安装Python2.7(https://www.python.org/) 在环境变量path中加入“C:\Python27” 安装后的验证方法为在命令行 ...
- 一、React Native 搭建开发环境(1)(Mac OS - IOS项目篇)
React Native是Facebook推出的一个开发IOS和安卓APP的技术.至于更多的详情,这里不再描述,大家可以自行百度它的定义. 原因:由于我想在一台电脑上同时开发IOS和Android两个 ...
随机推荐
- 简单利用XSS获取Cookie信息实例演示
简单利用XSS获取Cookie信息实例演示 首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高.随便 ...
- Java练习 SDUT-2053_整理音乐
整理音乐 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请用链表完成下面题目要求. xiaobai 很喜欢音乐,几年来 ...
- HDU-1160_FatMouse's Speed
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Sp ...
- 【NS2】学习点滴
1 $ns duplex-link-op $n2 $n3 queuePos 0.5#此命令用于设置在NAM中显示的队列方向#经测试,发现: # queuePos 0.5表示包从上到下进入队列# que ...
- 【转】solr deltaImportQuery deltaQuery parentDeltaQuery 用法规则
solr deltaImportQuery deltaQuery parentDeltaQuery 用法规则 by 建良 · 2013 年 6 月 20 日 query是获取全部数据的SQL delt ...
- 说说iOS与内存管理(上)
http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...
- oracle函数 MAX([distinct|all]x)
[功能]统计数据表选中行x列的最大值. [参数]all表示对所有的值求最大值,distinct只对不同的值求最大值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开. [参数] ...
- QT 获取系统时间
1.导入QTime #include <QTime> 2.定义QTime 对象接受当前时间 QTime t=QTime::currentTime(); t就是系统时间. 3.将t转化为st ...
- qt开发ROS gui界面环境配置过程总结
这段时间花了点时间配置了在qtcreator5.9.1上开发ros gui界面的环境,终于可以实现导入工程,插断点调试了.总结起来需要注意以下几点: 1.安装插件ros_qtc_plugin,ROS与 ...
- 8-2udp和tcp网络编程以及粘包和解决粘包的方法
一 tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...