React基础-组件UI及交互

34 阅读3分钟

前言

主要讲解React组件的UI和组件的交互基础知识

描述UI

你的第一个组件

组件:每个UI模块是一个组件

创建组件流程:导出组件,定义函数,返回jsx,函数名大写

jsx大括号使用javascript

用双引号传递属性

用大括号传递:变量、函数、对象,=号后面都是属性

将props传递给组件

props 传递属性,也可以用{...props}传递

子组件{}解构传递过来的值

传递html,父组件有个children 参数

条件渲染

  • if else
  • 三目运算符
  • && 运算符

使用跟在js中用法一样

渲染列表

  • map

  • 遍历,返回jsx数组,然后用花括号渲染

  • filter

  • 先过滤,再用map遍历

  • key

  • 用key保存唯一值

返回的时候用{}包裹变量值

保持组件纯粹

纯函数,不修改传递过来的值

UI作为树

添加交互

响应事件

编写事件处理函数不同方法: {函数名} 。{()=>{函数内容}}

事件如何传播及如何停止他们:

函数体加:e.stopPropagaton()阻止传播

捕获加Capture实现:onClickCapture={}

阻止默认行为:e.preventDefault()

State:组件的记忆(记忆组件的state)

useState Hook添加变量

hook使用

渲染和提交

  • react应用一次屏幕更新会发生

  • 触发:应用启动,react调用跟根组件

  • 渲染:react调用你在组件

  • 提交

  • react把更改提交到dom上

  • 初次渲染,用appendChild() 将创建dom节点放屏幕上

  • 重新渲染,渲染存在差异节点

  • 渲染纯函数,没副作用

state 如同一张快照

state只会为下一次渲染变更state值,react使state值固定在一次渲染渲染各事件处理函数内部

当你调用 useState时,react会为你提供该次渲染的一张state快照

把一系列state更新加入队列

state更新, setState传入函数,才会把函数放进队列更新

更新state中的对象

state对象只读不能直接修改。

只能创建新对象修改(浅拷贝)

immer编写更简单

更新state数组

只读:返回一个新数组(都可以更新数组)

  • 添加数组:concat,[...arr]
  • 删除:filter,slice
  • 替换:map
  • 排序:复制一份新的

使用

删除数组

插入数组:插入新数组

immer更新:

总结

用{}传递表达式,传递组件处理,列表渲染用{}包裹变量

更改数组state,需要返回新组件api才有效。setState要传递新对象。可以用immer简化新对象更新。