跳转至

React

React

React的设计哲学是组件化

基础语法

import React, {useState} from 'react';
import { useNavigate } from 'react-router-dom';  //用于路由跳转

const Welcome = ()=> {
  const [inputValue, setInputValue] = useState('');  //创建钩子
  const handleSend = async () => {          
    if (inputValue.trim()) {
      const userName = inputValue.trim();
      navigate("/room", { state: userName });
    }
  };

  return (
    <div className="welcome-container">
          <div className="form-group">
            <input type="text"
            className="form-input"
            value={inputValue}
            onChange={(e) => setInputValue(e.target.value)} />  //传递输入框的值
          </div>
          <button type="submit" className="submit-button" onClick={()=>handleSend()}>提交</button>
    </div>
  );};

export default Welcome;

组件化

目前主流的设计理念是函数化组件

组件会具有从上到下的树状结构关系,函数、参量可以有上到下传递

在tsx中,使用<ComponentName value={...} />使用组件并传递参量

使用export 关键字使此函数可以在此文件之外访问。default 关键字表明它是文件中的主要函数。

钩子函数

useState

useState用于创建一个可更新的状态量,它可以在组件中自上而下传递

使用例如:const [inputValue(值), setInputValue(更改函数)] = useState(初始值);

可以读取值,但不能直接赋值,而是使用更改函数进行替换(如果要合并,使用[... Newdata])

useRef

useRef用于创造一个引用,它可以让函数实时获取最新的、相同的值

使用const ref = useRef(初始值)进行初始化,使用.current获取/修改其值

修改ref并不会导致组件重新渲染

useEffect

useEffect用于处理副作用(side effects),即那些影响到组件外部环境的操作,其语法如下:

useEffect(() => {
  ...  // 副作用逻辑
  return () => {
  ...  // 清理逻辑
  };
}, [dependencies]);//触发依赖
  • 副作用逻辑:每次触发时会执行的函数
  • 清理逻辑:使用清理逻辑清除遗留效果
  • 触发依赖:
  • 空数组 []: 仅在组件挂载(触发副作用)和卸载(触发清理)时执行。
  • 依赖项变化时: 当依赖项中的某个值发生变化时,先执行旧逻辑的清理函数,然后执行新的副作用。

然而useEffect的功能比较初级,对许多情况下推荐使用集成的第三方库

useSWR

使用import useSWR, { mutate } from 'swr';进行引入

基础语法: const {data, error, isLoading} = useSWR(key, fetcher,{...设置})

key是一个状态量唯一的标识,fetcher会接受key并获取数据,其返回值会自动更新状态量

设置中可以传入如refreshInterval:300,对自动更新间隔等进行更新

可以全局使用由key标记的状态量

可以全局使用mutate(key)的方式,立即进行更新并重新渲染

(注意,由于使用mutate更新与获取数据是异步的,需要使用await等方式延后mutate的更新)

设计哲学

  • 将 UI 拆解为组件层级结构
  • 使用 React 构建一个静态版本
  • 找出 UI 精简且完整的 state 表示与位置
  • 添加数据流逻辑