react笔记

1.html文件中引入库:react、react-dom、Babel
    <script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
    <script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>

    ReactDom.render('',document.getElementById(''))
2.jsx(javascript+xml)
  html:react/react-dom/babel
  脚手架:webpack(babel)+模块化+react/react-dom/babel
    let info=<h2>{Math.random()}</h2>
    1)表达式
      在jsx中,可以应用在组件内容中
      <div>{msg}</div>
      可以应用在属性
      <div onClick={}></div>
    2)列表渲染
      let users=[]
      let trs=users.map(item=>{
        return (
          <tr>
            <td>{item.id}</td>
            <td>{item.name}</td>
            <td>{item.age}</td>
          </tr>
        )
      })
      let table=<table><tbody>{trs}</tbody></table>
    3)条件渲染
      let users=null;
      let div;
      if(user){
        dom=<div>{user.realname}</div>
      }else{
        dom=<div>请登录</div>
      }
3.事件
  <button onClick={this.addHandler}></button>
  onClick 区别于原生dom的事件绑定,使用驼峰式命名
  onClick 的取值可以为一个变量,该变量指向事件处理函数,该事件
  处理函数在组件函数中,必须通过this来访问
  在类组件中,事件处理函数的this默认指向undefined,可以在
  constructor中通过bind函数绑定this

  foo.call()/foo.apply()/foo.bind()

  <button onClick={()=>{this.delHandler(item.id)}}>删除</button>
  如果onClick的值为回调函数,回调函数中是真正事件处理函数调用,
  该事件处理函数的this就为当前组件实例对象

  其他:
    事件三要素:事件源、事件处理函数、事件对象
    事件流(元素的嵌套):事件捕获(外->内)
    事件代理:将事件处理函数绑定在父元素而非子元素上
4.状态 
  constructor(){
    this.state={
      xxx
    }
  }
  this.setState
  this.state.xxx
  1)只读,不可以通过this.state.xx直接修改xx的值
  2)响应式,当xx发生变化,会引起组件的重新渲染
  3)类组件中,可以在constructor中初始化,在函数组件中通过use State hook,
  添加状态机制
  4)想要修改状态,在类组件this.setState来修改,在函数组件,通过[num,setNum]
  setNum来修改
5.组件
    1)函数组件(推荐使用)
      类似于vue中的setup,函数组件也称为无状态组件,如果想要拥有
      状态(当状态发生变化的时候,组件会重新渲染,类似于vue中的data)
      可以借助hook(钩子)。函数组件有个形参props表示期望接收到的参数。
      function ComponentA(props){
          return ()
      }

      状态声明:借助Hook useState
        let [total,setTotal]=useState(0)
      生命周期:借助Hook useEffect
      useEffect(()=>{
        //componentDidMount、componentDidUpdate
        setTotal(total+1)
        //组件销毁阶段 componentWillUnMount
        return ()=>{}
      },['total'])

    2)类组件
      在类组件中,我们的定义类需要继承React.Component;
      render 函数务必要重新进行定义;
      构造函数可以不提供,如果提供,那么第一行代码一定是调用
      父构造函数,通过super,
      构造函数的作用:初始化state,初始化函数
      类中我们直接定义方法,这些方法可以在jsx中使用,只不过要通过
      this来进程访问
      类中我们可以直接编写生命周期钩子方法,例如“componentDidMount,
      这些方法会在生命周期的对应阶段进行执行。
      class ComponentA{
        constructor(props){
          super(props)
          //状态初始化、函数的this绑定
        }
        //生命周期
        componentDidMount(){
        
        }
        render(){
          return <div></div>
        }
      }
  
      let c={
          data(){
              return {
              
              }
          }
      }
6.类组件生命周期
  1)初始化绑定阶段
    constructor:组件实例初始化 state,methods
    static getDerivedStateFromProps()
      //将props中的值映射到state中,应用场景?
    render:渲染
    componentDidMountreact-dom/babel
      //初次渲染完毕
  2)更新阶段(当state/props发生改变的时候)
    static getDerivedStateFromProps()
      //将props中的值映射到state中,应用场景?
    render:渲染
    componentDidUpdate:更新完毕
  3)销毁阶段
    componentWillUnMount:准备销毁,回收
7.函数组件生命周期
  分类管理:
    categories
    params:{}
  function ComponentA(){
    const [params,setParams]=
    useState({page:1,pageSize:10})
    const [categories,setCategories]=useState([])

    function loadCategories(){

    }

    useEffect(()=>{
      //componentDidMount(初始化ajax)、componentDidUpdate()
      //加载categories
      loadCategories();

      //componentWillUnMount
      return ()=>{

      }
      
    },['categories']);
  }
8.表单
  react 表单不存在双向数据绑定,如果想要获取表单数据,需要通过onChange
  进行表单元素的监听,通过事件对象获取表单元素上的值
其他:
  Effect:副作用,函数执行完毕后会对函数外部变量造成影响
    class Foo{
      users:[];

      loadData(){
        axios.get()
        this.users=response.data;
      }
    }
  plain Function:纯函数,函数执行完毕后不会对外部变量造成影响,
  并且传入什么样的参数就返回对应的结果

    function foo(a,b){
      return a+b;
    }
9.ref引用
  reactjs.org官方文档
  DOM引用,渲染(可视化,canvas...)
  this.container=React.createRef()  //{current:null}

  this.container.current
  <div ref={this.container}></div>
10.高阶组件HOC <=>类似于vue中的混入mixin
  高阶组件,接收一个组件作为参数,返回一个新的组件
  reduce(高阶函数)
  作用:抽离公共特性,例如路由、状态机....
  实现方法:
    1)props代理;
      function withInfo(WrappedComponent){
        return class extends React.component{
          render(){

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值