首页 > 其他分享 >react后续

react后续

时间:2023-08-08 17:22:41浏览次数:34  
标签:React 后续 props react Context Provider 组件 addCount

组件之间的通信

父传子

父组件通过 属性=值 的形式来传递给子组件数据;

        <Mainbanner banners={banners}/>
        <Mainproductlist productlist={productlist}/>

子组件通过 props 参数获取父组件传递过来的数据;

const{banners}=this.props
    return (
      <div className='banner'>
        <ul>
          {
            banners.map(item=>{
              return <li key={item.acm}>{item.title}</li>
            })
          }
        </ul>
      </div>
    )

propTypes

导入

import propTypes from 'prop-types'
Mainbanner.propTypes={
  banners:propTypes.array.isRequired
}

子传父

在React中同样是通过props传递消息,只是让父组件给子组件传递一个回调函数,在子组件中调用这个函数即可

<Addcounter addclick={(count)=>{this.changecount(count)}}></Addcounter>
addCount=(count)=>{
    this.props.addclick(count)
   }
  render() {
    return (
      <div>
        <button onClick={e=>this.props.addclick(1)}>+1</button>
        <button onClick={e=>this.addCount(5)}>+5</button>
        <button onClick={e=>this.addCount(10)}>+10</button>
        <button onClick={e=>this.addCount(-1)}>-1</button>
        <button onClick={e=>this.addCount(-5)}>-5</button>
        <button onClick={e=>this.addCount(-10)}>-10</button>
      </div>
    )
  }

 

非父子组件context

React.createContext

创建一个需要共享的Context对象:如果一个组件订阅了Context,那么这个组件会从离自身最近的那个匹配的 Provider 中读取到当前的context值;defaultValue是组件在顶层查找过程中没有找到对应的Provider,那么就使用默认值

 

Context.Provider

每个 Context 对象都会返回一个 Provider React 组件,它允许消费组件订阅 context 的变化:Provider 接收一个 value 属性,传递给消费组件;一个 Provider 可以和多个消费组件有对应关系;多个 Provider 也可以嵌套使用,里层的会覆盖外层的数据;当 Provider 的 value 值发生变化时,它内部的所有消费组件都会重新渲染

 

 

Class.contextType

挂载在 class 上的 contextType 属性会被重赋值为一个由 React.createContext() 创建的 Context 对象:这能让你使用 this.context 来消费最近 Context 上的那个值;你可以在任何生命周期中访问到它,包括 render 函数中;

 

Context.Provider

每个 Context 对象都会返回一个 Provider React 组件,它允许消费组件订阅 context 的变化:Provider 接收一个 value 属性,传递给消费组件;一个 Provider 可以和多个消费组件有对应关系;多个 Provider 也可以嵌套使用,里层的会覆盖外层的数据;当 Provider 的 value 值发生变化时,它内部的所有消费组件都会重新渲染;

 

setstate

为什么使用setstate

因为我们修改了state之后,希望React根据最新的State来重新渲染界面,但是这种方式的修改React并不知道数据发生了变化;React并没有实现类似于Vue2中的Object.defineProperty或者Vue3中的Proxy的方式来监听数据的变化;我们必须通过setState来告知React数据已经发生了变化;

PureComponent

如果所有的类,我们都需要手动来实现 shouldComponentUpdate,那么会给我们开发者增加非常多的工作量。

 我们来设想一下shouldComponentUpdate中的各种判断的目的是什么?

 props或者state中的数据是否发生了改变,来决定shouldComponentUpdate返回true或者false;

事实上React已经考虑到了这一点,所以React已经默认帮我们实现好了,如何实现呢?

 将class继承自PureComponent。

 

标签:React,后续,props,react,Context,Provider,组件,addCount
From: https://www.cnblogs.com/guorunbin/p/17614920.html

相关文章

  • 正确使用classnames库的方式摸索【玩转React】
    前言我们日常开发使用的是React框架,主要采用JSX写法,而classnames与JSX十分般配,组合使用效果极佳,可以实现class的动态绑定。接下来,通过对classnames源码的阅读,来进一步了解classnames出现的契机及其用法。听说你叫className讲classnames之前,科普一点关于它「兄弟」className......
  • React—02—描述UI
    不要在渲染dom的时候修改数据,否则可能会触发重新渲染。   React提供了“严格模式”,在严格模式下开发时,它将会调用每个组件函数两次。通过重复调用组件函数,严格模式有助于找到违反这些规则的组件。我们注意到,原始示例显示的是“Guest#2”、“Guest#4”和“Guest#6......
  • React Hook 的闭包陷阱
    参考文章1.从reacthooks“闭包陷阱”切入,浅谈reacthooks2.一文讲透ReactHooks闭包陷阱 HooksHooks是react自16.8引入的新特性,使得开发者在摆脱class定义组件的同时,也能够进行状态管理。这样,react组件完全进入函数式(FP)编程范式。既然进入了函数式编程的......
  • [React Typescript] Ensure correct inference for prop types with satisfies & Comp
    import{ComponentProps}from"react";import{Equal,Expect}from"../helpers/type-utils";constbuttonProps={type:"button",//@ts-expect-errorillegalProperty:"IAMILLEGAL",}asconstsatisfiesC......
  • 解决业务中,要插入数据库,获取到插入数据的主键来进行后续操作
    在项目中经常需要获取到插入数据的主键来保障后续操作,数据库中主键一般我们使用自增或者uuid()的方式自动生成,问题:对于uuid使用Java代码生成的方式还比较容易控制,但是如果主键必须用int或Long,使用数据库生成的主键比较简便,这样我们就需要将插入的数据再查询出来得到主键,某些情况下......
  • 【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio构建React完成点餐H5页面
    前言最近也是有机会参与到了腾讯云举办的腾讯云CloudStudio实战训练营,借此了解了腾讯云CloudStudio产品。腾讯云CloudStudio的出现是有一定创新性的,使用它进行开发免去了使用一些传统开发工具的成本。如下载一个开发工具就要进行基本的开发环境配置,以及下载、安装......
  • 为react项目添加开发/提交规范(前端工程化、eslint、prettier、husky、commitlint、sty
    因历史遗留原因,接手的项目没有代码提醒/格式化,包括eslint、pretttier,也没有commit提交校验,如husky、commitlint、stylelint,与其期待自己或者同事的代码写得完美无缺,不如通过一些工具来进行规范和约束。eslinteslint是一个代码校验工具,用来规范项目代码风格。初始化通过n......
  • 【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面
    前言:CloudStudio是一个在线的云集成开发环境(IDE),可以让开发人员在浏览器中轻松地开发、测试、调试和部署应用程序。它提供了基于云的计算资源和工具,例如代码编辑器、编译器、调试器、版本控制系统和项目管理工具等,使开发人员可以在任何地点使用任何设备进行开发,而不需要在本地安装......
  • 用React仿钉钉审批流
    引言这几天帮朋友忙,用了一周时间,高仿了一个钉钉审批流。这个东西会有不少朋友有类似需求,就分享出来,希望能有所帮助。为了方便朋友的使用,设计制作的时候,尽量做到节点配置可定制,减少集成成本。如果您的项目有审批流需求,这个项目可以直接拿过去使用。React初学者也可以把本项目当做......
  • 前端学习笔记202306学习笔记第四十八天-react-admin marmelab之6
            ......