React开发实(3)react 进阶

简介: React开发实(3)react 进阶

1、React 开发调试工具 安装

1、Google 商店 https://chrome.google.com/webstore/category/extensions?hl=zh
 2、react dev tools 就会变成黑色 
复制代码

网络异常,图片无法展示
|

  • 组件信息 也比较方便,可以看到组件结构

2、propTypes 和 defaultProps

* 如何对接收参数 类型定义, 默认值如何做校验  ?

网络异常,图片无法展示
|

  • 当我尝试 更改 index 为 string 时

网络异常,图片无法展示
|

  • 当父组件并未传递 某个值,子组件却使用到了,怎么处理?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 可以限制 必须传递

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 如果 父 组件确实没有 则 可以添加一个 默认值

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 官方文档还有 一件事情 需要注意  可以有多种类型
  • 先尝试 敲一下

网络异常,图片无法展示
|

网络异常,图片无法展示
|

3、props, state, render 再思考

  • 两个重要的内容
1、当组件的 state 和 props 发生变化时, render 会重新执行,渲染页面
  2、父组件 render 执行 默认 子组件的 render 也会执行(shouldComponentUpdate默认情况下为true)
复制代码
  • 举例子说明一下  state变化时 页面重新渲染

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 举例子说明一下  props 变化时 页面重新渲染 及  父组件 render 执行 子 render 也执行

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

4、什么是 虚拟 DOM ?

  • 注意 本节 虚拟 dom 和真实 dom 生成顺序 暂时写反

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 对比 真实 DOM是 比较损耗性能大, 但对比 JS对象是 不损耗性能的
  • 再尝试 敲一下  其实将 dom 转为 js 对象 写法也不困难

网络异常,图片无法展示
|

{/* <div id='div1' class="container">
    <p>vdom</p>
    <ul style='font-size: 2px'>
        <li>a</li>
    </ul>
</div> */}
{
    tag: 'div',
    props: {
        className: 'container'
        id: 'div1' 
    },
    children: [
        {
            tag: 'p',
            children: 'vdom'
        },
        {
            tag: 'ul',
            props: {
                style: "font-size: 2px"
            },
            children:[
                tag: 'li',
                children: 'a'
            ]
        }
    ]
}
复制代码

5、什么是 虚拟 DOM 补充?

网络异常,图片无法展示
|

  • 也就是说 看到的 JSX 其实不是 真实的 DOM节点

网络异常,图片无法展示
|

  • 将 dom 转为了 js 对象, 在原生应用当中 转为了对应的 语法表达
    网络异常,图片无法展示
    |

6、什么是 虚拟 DOM 中的 diff 算法 ?

  • 虚拟 DOM 只会进行一次 比对操作
    网络异常,图片无法展示
    |

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 为啥不要使用 index 作为 key 值原因
  • 比如 当前 添加了三个内容
    网络异常,图片无法展示
    |

  • 这样就导致 无法 复用,因为 b c 当前的 key不对应 需要删除 重建

网络异常,图片无法展示
|

  • 尝试将 key 值 更改为 不相同的(假设 item 不重复)

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

7、React 中 ref 使用 ?

  • 目的是 拿到某个 dom 然后操作 dom 其实 e.target 也可拿到数据
  • 比较细节 也比较基础的内容,较少用 , React 中 操作 某个 元素DOM
1、选择 某个元素  比如 (input) => this.input = input
  2、在 setState 中使用 注意 这个异步函数需要 放在第二个参数 位置, 才能拿到state 更新后的值 
复制代码
  • 举例子说明一下 这个事情 使用 ref 选择某个元素 其实有几种方法

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • length 对应不上

网络异常,图片无法展示
|

  • 注意 setState 第二个参数 是个 函数

网络异常,图片无法展示
|

网络异常,图片无法展示
|

8、React 生命周期 部分  ?

网络异常,图片无法展示
|
网络异常,图片无法展示
|

1、 初始化阶段  设置 props 和 state

网络异常,图片无法展示
|

2、挂载阶段

网络异常,图片无法展示
|

  • 此处 注意

网络异常,图片无法展示
|

3、更新阶段

  • 简单来说 数据发生变化时,执行, 数据变化体现在 props/state 变化
  • 先不说WillReceiveProps 因为下面的流程两个相同

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 注意componentWillReceiveProps 不会在顶层组件执行

网络异常,图片无法展示
|

网络异常,图片无法展示
|

4、卸载阶段

  • 此处例子 删除 子组件时 执行 卸载

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 还需要注意一件事情  每个 组件都可以有这些生命周期函数
  • 比如 父组件 render  子组件也可 render

9、React 生命周期 使用场景  ?

1、需要注意的事情, class 组件必须 需要 render 这个生命周期函数,因为 组件 extends React.Component 这个内置了其他的生命周期函数,没有 render

2、父组件更新 子组件也会默认更新,如何优化这个事情 ?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 只会更新一次 ,只有 props 变化时 才会改变

网络异常,图片无法展示
|

  • 性能优化方案 简述
1、setState 多次操作可以被合并 
  2、绑定 this 的操作放在 constructor 中
  3、使用 scu 避免子组件多次重复渲染
  4、使用 React.lazy 懒加载
  5、使用 React.memo 检查 props 更改再变化
  const MyComponent = React.memo(function MyComponent(props) {/* render using props */});
  ```
复制代码
  • 生命周期函数中发送异步请求 componentDidMount
  • 我们先假设直接在 render 中直接写会怎样

网络异常,图片无法展示
|

  • 正确的姿势是 这样的
1、安装一个 axios
 2、使用 
 3、注意 工作中常规 将 api 请求放在 thunk 中,直接调用 
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

10、使用 Charles 进行接口数据模拟   ?

1、先使用 终端 touch item.json 在桌面新建一个文件,添加一点内容
      2、打开 Charles 使用 tools --> map Local
      3、填写端口后和信息
      4、选择桌面 json 文件 
      5、浏览器 再次请求 成功后可以渲染数据
      6、数据渲染 时候 通过更改 state 值 渲染数据 
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

11、React 的 CSS 过渡动画    ?

  • 新建一个 展示 css 的组件

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 添加一个 CSS 文件

网络异常,图片无法展示
|

12、React 中使用 css 动画效果    ?

  • 需要 学会这样的简单使用

网络异常,图片无法展示
|

13、React 中使用 react-transition-group 实现动画    ?

  • 使用这个 进行更加 复杂的动画模块编写,可用到工作上
1、安装 yarn add react-transition-group
      2、按照文档引入使用 
      3、
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 就可非常开心的看到效果
  • 官方文档再次写在此处reactcommunity.org/react-trans…
  • 再加一部分 内容 一组动画怎么添加 ? 需要使用到 group
1、使用 group 包裹
  2、内层使用 cssTransition
复制代码
  • 将代码 放在此处
  • js
import { CSSTransition, TransitionGroup } from "react-transition-group";
import "./app.css";
class App extends Component {
  constructor(props) {
    super(props);
    this.state = { list: [] };
  }
  handleAddItem = () => {
    this.setState((prevState) => {
      return {
        list: [...prevState.list, "item"],
      };
    });
  };
  render() {
    return (
      <>
        <TransitionGroup>
          {this.state.list.map((item, index) => {
            return (
              <CSSTransition
                timeout={1000}
                classNames="fade"
                unmountOnExit
                appear={true}
                key={index}
              >
                <div>{item}</div>
              </CSSTransition>
            );
          })}
        </TransitionGroup>
        <button onClick={this.handleAddItem}>toggle</button>
      </>
    );
  }
}
export default App;
复制代码
  • css
.show{
    animation: show-product 2s ease-in forwards;
}
.hide{
    opacity: 0;
    transition: all 1s ease-in-out;
}
@keyframes show-product {
    0%{
        opacity: 0;
        color: red
    }
    50%{
        opacity: 0.5;
        color: yellow;
    }
    100%{
        opacity: 1;
        color: green;
    }
} */
.fade-enter{
    opacity: 0;
}
 .fade-enter-active{
    opacity: 1;
    transition: all 1s ease-in-out;
}
.fade-enter-done{
    opacity: 1;
    color: red;
}
.fade-exit{
    opacity: 1;
} 
.fade-exit-active{
    opacity: 0;
    transition: all 1s ease-in-out;
} 
.fade-exit-done{
    opacity: 0;
}
复制代码
  • 非常感谢 本节完!

撒花 🎉🎉🎉

更多项目请访问 github  github.com/huanhunmao

gitee 项目地址 gitee.com/huanhunmao/…



相关文章
|
1月前
|
开发框架 前端开发 JavaScript
从零开始学习React Native开发
React Native是一种基于React框架的移动端开发框架,使用它可以快速地构建出高性能、原生的移动应用。本文将从零开始,介绍React Native的基础知识和开发流程,帮助读者快速入门React Native开发,并实现一个简单的ToDo应用程序。
|
1月前
|
JavaScript 前端开发 算法
js开发:请解释什么是虚拟DOM(virtual DOM),以及它在React中的应用。
虚拟DOM是React等前端框架的关键技术,它以轻量级JavaScript对象树形式抽象表示实际DOM。当状态改变,React不直接操作DOM,而是先构建新虚拟DOM树。通过高效diff算法比较新旧树,找到最小变更集,仅更新必要部分,提高DOM操作效率,降低性能损耗。虚拟DOM的抽象特性还支持跨平台应用,如React Native。总之,虚拟DOM优化了状态变化时的DOM更新,提升性能和用户体验。
41 0
|
17天前
|
前端开发 JavaScript 程序员
开发语言漫谈-React
React同Vue一样,都是基于Javascript上的框架,不是独立语言
|
1月前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
19天前
|
前端开发 NoSQL JavaScript
基于 React + Nest 全栈开发的后台系统
这篇文章介绍了一个基于React+Nest全栈开发的后台系统XmwAdmin。项目包括前端和后端技术栈,线上预览地址和登录信息。作者推荐使用pnpm包管理工具和特定的环境依赖。文章提供了项目的运行和编译代码,以及各个功能模块的介绍。还包括演示图和项目活动以及总结部分。数据库下载链接也提供了,该项目已完成后台的核心功能。
基于 React + Nest 全栈开发的后台系统
|
19天前
|
缓存 前端开发 JavaScript
React适合开发什么类型的应用?
【5月更文挑战第27天】React适合开发什么类型的应用?
22 3
|
24天前
|
前端开发 JavaScript Android开发
使用React Native开发跨平台移动应用的技术详解
【5月更文挑战第22天】本文详述了使用React Native开发跨平台移动应用的技术,该框架由Facebook推出,基于JavaScript,支持iOS和Android。React Native通过JNI/JSI实现JavaScript到原生代码的转换,提供高效性能和原生体验。其优势包括跨平台性、原生体验、开发速度及社区支持。开发流程涉及环境搭建、项目创建、编码、调试与测试,以及构建与发布。注意事项包括性能优化、平台适配、利用第三方库和持续学习。React Native为开发者构建高质量跨平台应用提供了便捷途径,未来潜力无限。
|
28天前
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
22 0
|
1月前
|
缓存 前端开发
Web开发:深入探讨React Hooks的使用和最佳实践
Web开发:深入探讨React Hooks的使用和最佳实践
25 0
|
1月前
|
设计模式 前端开发 API
写出易维护的代码|React开发的设计模式及原则
本文对React社区里出现过的一些设计模式进行了介绍,并讲解了他们遵循的设计原则。