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 API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
116 4
React开发需要了解的10个库
|
3月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
4月前
|
前端开发 JavaScript 安全
TypeScript在React Hooks中的应用:提升React开发的类型安全与可维护性
【7月更文挑战第17天】TypeScript在React Hooks中的应用极大地提升了React应用的类型安全性和可维护性。通过为状态、依赖项和自定义Hooks指定明确的类型,开发者可以编写更加健壮、易于理解和维护的代码。随着React和TypeScript的不断发展,结合两者的优势将成为构建现代Web应用的标准做法。
|
1月前
|
前端开发 JavaScript 开发者
React 组件化开发最佳实践
【10月更文挑战第4天】React 组件化开发最佳实践
49 4
|
2月前
|
XML 移动开发 前端开发
使用duxapp开发 React Native App 事半功倍
对于Taro的壳子,或者原生React Native,都会存在 `android` `ios`这两个文件夹,而在duxapp中,这些文件夹的内容是自动生成的,那么对于需要在这些文件夹中修改的配置内容,例如包名、版本号、新架构开关等,都通过配置文件的方式配置了,而不需要需修改具体的文件
|
2月前
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
3月前
|
JavaScript 前端开发 安全
[译] 使用 TypeScript 开发 React Hooks
[译] 使用 TypeScript 开发 React Hooks
|
3月前
|
移动开发 前端开发 JavaScript
"跨界大战!React Native、Weex、Flutter:三大混合开发王者正面交锋,揭秘谁才是你移动应用开发的终极利器?"
【8月更文挑战第12天】随着移动应用开发的需求日益增长,高效构建跨平台应用成为关键。React Native、Weex与Flutter作为主流混合开发框架各具特色。React Native依托Facebook的强大支持,以接近原生的性能和丰富的组件库著称;Weex由阿里巴巴开发,性能优越尤其在大数据处理上表现突出;Flutter则凭借Google的支持及独特的Dart语言和Skia渲染引擎,提供出色的定制能力和开发效率。选择时需考量项目特性、团队技能及生态系统的成熟度。希望本文对比能助你做出最佳决策。
159 1
|
3月前
|
前端开发
React——开发调式工具安装【五】
React——开发调式工具安装【五】
31 0
React——开发调式工具安装【五】
|
3月前
|
开发者 自然语言处理 存储
语言不再是壁垒:掌握 JSF 国际化技巧,轻松构建多语言支持的 Web 应用
【8月更文挑战第31天】JavaServer Faces (JSF) 框架提供了强大的国际化 (I18N) 和本地化 (L10N) 支持,使开发者能轻松添加多语言功能。本文通过具体案例展示如何在 JSF 应用中实现多语言支持,包括创建项目、配置语言资源文件 (`messages_xx.properties`)、设置 `web.xml`、编写 Managed Bean (`LanguageBean`) 处理语言选择,以及使用 Facelets 页面 (`index.xhtml`) 显示多语言消息。通过这些步骤,你将学会如何配置 JSF 环境、编写语言资源文件,并实现动态语言切换。
41 0