react学习笔记整理

138 阅读3分钟

写在前面:最近抽时间温习了下react文档,记录下自己觉得比较重要的点

  • jsx是在js代码中可以直接写标签(包含自定义组件(手写字母大写),或者普通h5标签)

  • 在写jsx和vue一样只支持单个根节点,但是在react中可以将根节点变成react推荐的 Fragment 标签

  • react中有函数组件和基于class的组件,函数组件可以直接返回元素(jsx语法),基于class的组件需要基于react.Component这个基类定义

  • 对于在react实现v-if,可以直接 <div>{count > 0 && Component1}<div> 或者  <div>{count > 0 ? Component1 : Component2}<div>,使用三元运算符;

  • 对于在react中实现v-show,使用三元运算符,然后更改class即可

  • 对于react推荐的数据流转: 在子组件中调用父组件的方法(该方法基于props传入子组件),用以更新父组件的state,然后再讲更新的数据传入子组件,子组件中直接绑定props.date, 进而更新视图

  • react中并没有slot的概念,默认props.children可以传递单独的元素;也可以以属性的形式直接指定其余的组件,其实就类似是将html直接以属性的形式传过去

  • react中v-for的实现,直接在render中,使用map实现

441DD5B4-7C52-4DB2-93B3-4BAC757D61D5.png

  • 父子组件通信基于props即可;兄弟组件通信直接公用父组件;不相邻组件通信用redux,类似于vuex

  • 对于css的写法:一般是index.css文件,然后通过直接 import ‘./index.css’ 引入; 同时在元素上class 属性变成className

  • 在组件中定义函数时,默认基于箭头函数语法进行定义,只有这样才能使函数内部this生效,无需bind this

handleClicked = (val) => {
    this.props.changeTitle(val)
}
  • 对于组件中this的使用要注意,防止this指向有问题

  • 基于propType对组件的props参数作类型校验

    import PropTypes from 'prop-types';
    class Greeting extends React.Component {
      render() {
        return (
          <h1>Hello, {this.props.name}</h1>
    );
  }
}
Greeting.propTypes = {
  name: PropTypes.string
};
  • 基于defaultProps给props赋默认值

  • 对于ref的写法和调用和vue有区别: 写法  <ul ref = {(ul) => this.ul = ul}>  测试 </ul> 调用:  直接在函数里调用 this.ul 即可

  • 父组件的render函数重新执行,会导致子组件的render也执行,那假如子组件的props没有发生变化,如何避免子组件render重新执行呢? 可以使用 shouldComponentUpdate这个钩子,比对当前props和更新props的区别,假如有区别返回TRUE,执行更新,否则返回FALSE不更新

  • 使用react-transition-group这个库实现动画效果:对于js动画,transition, transform都可以

  • 关于redux的学习 redux类似于vuex, 用来做全局数据管理

FB4F086B-AD8F-4DB4-9256-746D7A4D1D6A.png

  • 对于React-redux中间件的使用: 被provider包裹的组件中都可以拿到store中的数据

A5822AEA-4AB7-443D-AADF-663A3F2052E0.png

在组件中,使用connect方法,连接该组件和store

9A1C5848-AE3E-41BC-A31D-C03948D2B9E8.png

A5D08673-B8BF-4A30-A629-9C045B640F5C.png

mapStateToProp是直接将store中的inputValue映射到props中的inputValue

mapDispathToProps是可以直接调用store.dispatch方法, 更改store中的数据