react使用过程中常见问题


目录

一、减小输入字符数
二、用props.children来引用位于前置标签和后置标签之间的内容
三、创建组件两条主要的途径
四、JSX属性采用驼峰式的大小写规则(即‘onClick’而非‘onclick’)
五、JSX只能渲染单一个根节点
六、JSX中不方便使用条件语句的解决方法
七、如何在JSX内部渲染HTML标签
八、列表子元素添加key可以提升virtual dom的子级校正(reconciliation)的速度
九、JSX内联样式采用驼峰式大小写规则,以保持和DOM属性一致
十、高阶组件的主要作用
十一、为什么要用immutable.js?
十二、window.fetch的浏览器兼容补丁 whatwg-fetch
十三、js ES6新函数的兼容浏览器垫片, babel-polyfill
十四、Redux-Thunk的作用是改造store.dispatch函数,让其可以接收函数进行分发,函数可带上(dispatch,getState)两参数进行传递
十五、如何编写redux自定义middleware中间件
十六、FSA(Flux Standard Action)结构的Action
十七、redux-saga的redux-saga/effects常用的指令
十八、redux使用过程中常用的lodash函数
十九、redux常用的驼峰化处理库humps
二十、redux常用的json格式化处理库normalizr
二十一、react中常用到的新的js函数
二十二、react中如何阻止事件冒泡
二十三、Create React App中的代码切割,Code Splitting in Create React App
二十四、React组件生命周期
二十五、setState注意事项
二十六、mobx在ReactJS项目中的运用
二十七、报Error: Plugin/Preset files are not allowed to export objects, only functions.错误的解决方案

Code Splitting in Create React App

React组件生命周期小结

二十五、setState注意事项

1、setState是异步的。
2、setState会造成不必要的渲染,新的 state 其实和之前的有可能是一样的。这个问题通常可以通过 shouldComponentUpdate 来解决。也可以用 pure render 或者其他的库赖解决这个问题。
3、setState并不能很有效的管理所有的组件状态

二十六、mobx在ReactJS项目中的运用

引用自:http://blog.csdn.net/u012125579/article/details/69400169

mobx 最最核心的概念只有2个。 @observable 和 @observer ,它们分别对应的是被观察者观察者。这是大家常见的观察者模式,不过这里使用了,ES7 中的 装饰器。

核心概念2 actions 和 computed values,在 Component 中调用,这样通过 action 的方法,就避免了直接修改 props 的问题。可以通过引入 mobx 定义的严格模式,强制使用 action 来修改状态。mobx 提供了 computed 装饰器,用于获取由基础 state 衍生出来的值

import React, {Component} from 'react';
import { render } from 'react-dom';
import {observable, action, computed,useStrict} from 'mobx';
import {observer} from 'mobx-react';

useStrict(true);


class Store {
  @observable todos = [{ // 被观察者
    title: "todo标题",
    done: false,
  },{
    title: "已经完成 todo 的标题",
    done: true,
  }];

  @action changeTodoTitle({index,title}){
    this.todos[index].title = title
  }

  @computed get unfinishedTodos () {
    return  this.todos.filter((todo) => todo.done)
  }
}


@observer // 观察者
class TodoBox extends Component  {

  render() {
    console.log('render');
    return (
      
    { /* 把 unfinishedTodos 换成 todos,点击修改标题就会在控制台打印 "render".*/ } {this.props.store.unfinishedTodos.map( (todo,index) =>
  • {todo.title}
  • )}
{ this.props.store.changeTodoTitle({index:0,title:"修改后的todo标题"}); }} value="修改标题"/>
) } } const store = new Store(); render( , document.getElementById('root') );

二十七、报Error: Plugin/Preset files are not allowed to export objects, only functions.错误的解决方案

原因是 package.json 依赖包中既有 babel 7.0 版本,又有 babel 6.0 版本,就会报这个错误

解决方案:要么全部bebel相关的包升级到7.0,要么全部降级到6.0版的,再不行检查一下全部安装的babel版本,删除node_modules重新装包