欢迎大家指导与讨论 : )

  【持续更新】本文主要记录笔者在学习中遇到的问题,并作出相应总结。有错误的地方希望各位能够指出。

  一、在es6中getInitialState( 摘要:  constructor(props)和this.state )

/*es6*/
class TodoList extends Component{
constructor(props){
super(props);
this.state = {
items: ['hello', 'world', 'click', 'me']
}
}
render(){
//..
}
}
/*es5*/
var TodoList = React.createClass({
getInitialState: function() {
return {items: ['hello', 'world', 'click', 'me']};
},
render(){
//...
}
})

  二、在es6中setState( 摘要: fun.bind(this)和this.setState )

/*es6*/
class TodoList extends Component{
render(){
return (
<div>
<button onClick={ this.handleAdd.bind(this) } >Add item</button>
</div>
)
}
handleAdd(){
var newItem = prompt('enter a new')
var newItems = [ ...this.state.items, newItem ];
this.setState({items: newItems})
}
}

  三、PureRenderMixn在深比较会失效(摘要: Immutable提升性能)

/ assume this.props.value is { foo: 'bar' }
// assume nextProps.value is { foo: 'bar' },
// but this reference is different to this.props.value
this.props.value !== nextProps.value; //true
//错误:浅比较/引用对象的比较/this.props和nextProp实际上是两个不同的对象引用
/*正确做法1-------对象比较应该进行深比较*/
shouldComponentUpdate: function(nextProps, nextState) {
return this.props.value.foo !== nextProps.value.foo;
}
/*正确做法2-------使用Immutable提升对象深比较的性能*/

export default class TabHeader extends Component {
    shouldComponentUpdate(nextProps){
      return !Immutable.is(Immutable.fromJS(nextProps), Immutable.fromJS(this.props));

    }

    //..........
}

  四、Map结构的state由reducer传到组件时需要先提取this.props中的某个属性(摘要: this.props为多对象集合体)

export default class TabHeader extends Component {
shouldComponentUpdate(nextProps){
return !Immutable.is(Immutable.fromJS(nextProps), Immutable.fromJS(this.props));
}
render (){
const active = this.props.tabIndex
return (
//....
)
} //....
}

  五、reducer state中覆盖原object类型的state简洁写法(摘要: Object.assign())

Object.assign(...state, {
third: {
value: '',
show: true
}
})
//原state结构为
const initState = {
first: {
value: '',
show: true
},
second: {
value: '',
show: false
},
third: {
value: '',
show: false
}
}

   六、获取动态render组件的真实DOM节点及其value值(摘要: fun.bind(this) / ReactDOM.findDom())

export default class CascadeBar extends Component{
render(){
return ( <div>
{this.renderFirst()}
</div>
)
}
renderFirst(){
//if...render...
return(
<select onChange={this.countryChange.bind(this)} ref="countryInput">
//.....
</select>
)
}
countryChange(){
ReactDOM.findDOMNode(this.refs.countryInput).value
}
}

  七、父组件向子组件传递方法(摘要: React.cloneElement)

        <div className="Detail">
{this.props.children && React.cloneElement(this.props.children, {
helloWorld: this.helloWorld
})}
</div>

  八、不同浏览器对对象更新/对象深比较的兼容性问题(underscore的extend、omit)

// 无效手机UC不支持
return Object.assign(state, {left: {show: action.value}}
// 有效->克隆了一个新对象
var e = _.omit(state)
return _.extend(state , {left: {show: action.value}})

  十一、在.js文件中使用async( 摘要: 配置webpack )

loaders: [
{
test: /\.js|jsx$/,
loader: 'babel',
query: {
presets: ['es2015', 'stage-3'],
plugins: ['transform-runtime']
},
exclude: /node_modules/
}
]

  十、ant design的webpack配置

//package.json
{
"name": "processBar",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"antd": "^0.12.14",
"atool-build": "^0.6.6",
"babel-loader": "^6.2.4",
"babel-plugin-antd": "^0.3.2",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"css-loader": "^0.23.1",
"es3ify-loader": "^0.2.0",
"react": "^0.14.7",
"react-dom": "^0.14.7",
"style-loader": "^0.13.1",
"webpack": "^1.12.14"
}
} //webpack.config.js
var path = require('path')
var webpack = require('webpack') module.exports = {
entry: [
path.resolve(__dirname, 'index.js')
],
output: {
path: 'dist/',
filename: '[name].js'
},
resolve: {
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [
{
test: /\.js|jsx/,
loader: 'es3ify-loader'
},
{
test: /\.js|jsx$/,
loader: 'babel',
query: {
presets: ['es2015', 'react'],
cacheDirectory: true,
plugins: [
'babel-plugin-antd'
]
}
},
{
test: /\.css$/,
loader: 'style-loader!css-loader'
}
]
}
}

React问题总结与归纳的更多相关文章

  1. [RN] React Native 常见基本问题归纳总结

    [RN] React Native  常见基本问题归纳总结 本问题总结涉及到版本为: "react": "16.8.3","react-native& ...

  2. React Native汇错归纳(持续更新中……)

    1.2017-10-25: 报错信息:“Cannot find entry file index.android.js in any of roots…..” 解决方法: 1.首先从虚拟机中找问题:看 ...

  3. React核心内容归纳总结

    状态.属性.组件API.组件的生命周期 当react的状态改变时,自动执行this.render()方法更新组件ES6写React的时候,事件里不会自动绑定this,需要自己绑定,或者直接在const ...

  4. react 开发过程中的总结/归纳

    1.点击元素,获取绑定该事件的父级元素,使用 e.currentTarget.e.target 获取的是,出发该事件的元素,该元素有可能是所绑定事件的元素的子元素. 2.使用 react router ...

  5. Webpack+React+ES6开发模式入门指南

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  6. [React] 多组件生命周期转换关系

    前段时间一直在基于React做开发,最近得空做一些总结,防止以后踩坑. 言归正传,React生命周期是React组件运行的基础,本文主要是归纳多组件平行.嵌套时,生命周期转换关系. 生命周期 Reac ...

  7. 【腾讯Bugly干货分享】React移动web极致优化

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579083d1c9da73584b02587d 最近一个季度,我们都在为手Q家校 ...

  8. Webpack+React+ES6入门指南[转]

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  9. 正式学习React( 三)

    最基本的jsx语法什么的,我就不介绍了,唯一觉得有用点的,就是声明周期了. 下面的内容是转来的,自己也可以网上去搜,我觉得别人归纳的挺不错的,不过写法可能不是es6的,不影响学习. 在组件的整个生命周 ...

随机推荐

  1. IOS 音效

    IOS 音效 音效我们也可以成为短音频通常在程序中播放时间为1~2秒. 在应用程序中起到点缀效果,提升整体用户体验 音效文件只需要加载一次 示例代码: // // ViewController.m / ...

  2. JSP中request getParameter和getAttribute不同(转载)

    (1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,,request.setAttribute()和getAttribute()只是在 ...

  3. 简单的ASP.NET Forms身份认证

    读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛 ...

  4. json数组的序列化和反序列化json数组的序列化和反序列化

    如题,我就不多说了,自己看代码的,很好理解 using System; using System.Collections.Generic; using System.Web; using System ...

  5. JAVA NIO中的Channels和Buffers

    前言 Channels和Buffers是JAVA NIO里面比较重要的两个概念,NIO正是基于Channels和Buffers进行数据操作,且数据总是从Channels读取到Buffers,或者从Bu ...

  6. List 简单升\降序实现

    public class User { public int Id { get; set; } public string Code { get; set; } } //示例 //升序 list.So ...

  7. 神奇的decimal,也许面试会问到哦~

    这段时间忙的像狗一样,写博客的事情也就耽搁了,继续扯,为什么说decimal神奇呢,大家都知道decimal是基元类型,但是 这个decimal类型在IL中居然没有相应的IL指令,也就是说CLR根本不 ...

  8. 用了星型转换的sql跑了5小时--->5mins的过程

    =================START================================ BI数据仓库环境里面跑着一个crontab job,一旦sql运行超过4hours,就会接 ...

  9. MySQL 调优基础(五) Linux网络

    1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...

  10. dotNet使用HttpWebRequest模拟浏览器

    在编写网络爬虫时,HttpWebRequest几乎可以完成绝大多数网站的抓取,为了更好的使用这一技术,我将常用的几个功能进行了封装,以方便调用.这个类已经在多个项目中得到使用,主要解决了Cookies ...