前端之React学习(四)

前端之React学习(四)

路由进阶与高阶组件

高阶组件

参数是一个组件,同时返回的也是一个组件
这类组件称为高阶组件(如:WithRouter)

WithRouter

让不是路由切换的组件也具有路由切换组件的三个属性

  • location
  • match
  • history
  1. 引用
  2. 运用

监控路由变化 history

history.listen((link)=>{
Link.pathname 切换路径
})

编程式导航 history

props.history.push("/xxx")

路由传参

params 方式传参 match

  1. 需要在路由规则中设置传递的接收参数
    :xxx
  2. 发送参数,直接在跳转路径后进行编写
  3. 接收参数 props.match.params

优势:
刷新地址,参数依然存在
缺点
只能传递字符串,并且参数过多的时后 url 变丑

query 方式传参 location

  1. 不需要在路由规则中进行参数的配置
  2. 直接发送参数
  3. 接收参数 this.props.location.query

hook

  • 是 16.7 新增的特性
  • 主要是用来让无状态组件可以使用状态,在 react 开发中状态的管理是必不可少的
  • 以前为了进行状态管理,需要使用类组件或者 redux 等来管理

useState

  1. 引用
    import {useState} from "react";
  2. 调用
    useState 是定义一个状态,与类组件的状态不同,函数组件的状态可以是对象也可是基础数据类型
    useState 返回的是一个数组,第一个是当前的状态值,第二个是对象(表面更改状态的函数)-----类似与 setState
function User(props) {
  let [val, setVal] = useState(0);
  return (
    <div>
      使用数据:{val}
      <button
        onClick={() => {
          setVal(val + 1);
        }}
      >
        点我进行数据修改
      </button>
    </div>
  );
}

多个状态

声明对象类型的状态

多次声明(推荐)

//如果有多个状态?
//1. 声明对象类型状态
//2. 多次声明
function User(props) {
  //1. 声明对象类型状态
  // let [val, setVal] = useState({
  //   vala: 0,
  //   valb: 1,
  //   valc: 2,
  // });
  //多次声明(推荐)
  let [cala, setVala] = useState(0);
  let [calb, setValb] = useState(1);
  let [calc, setValc] = useState(2);
  return (
    <div>
      {/* <div>
        对象声明使用数据:{val.vala}------{val.valb}-------{val.valc}
      </div> */}
      <div>
        多次声明使用数据:{cala}-------{calb}-------{calc}
      </div>
    </div>
  );
}

redux

redux 是 javascript 提供的一个可预测性的状态容器
我们给一个固定的输入,那么必定可以得到一个结果
集中管理 react 中的多个组件的状态
redux 是一个专门的状态管理库(vue 和 react 中都可使用)

需求场景

  1. 某个组件的状态需要共享的时候
  2. 一个组件需要改变另一个组件的状态的时候
  3. 组件中的状态需要在任何地方拿到的时候

三大原则

  1. 单一数据原则
    整个 react 中的状态都会被统一管理到 store
  2. state 是只读的
    我们不能直接改变 state,而是要通过触发 redux 中特定的方法来进行修改
  3. 使用纯函数来执行修改操作
    action 来改变 redux 中的 state

使用

下载

npm i --save redux

读取,修改

  1. 创建 redux 文件夹
  2. 在 redux 下 创建 reducer.js(设置 state 数据对象) store.js(接收,并导出需要的数据) action.js(修改 state 的操作函数)
  3. 在所需要 state 的组件中引用、渲染
  • reduce.js
var obj = [{ name: "嘻嘻", age: 18 }];
export function data(state = obj[0].age, action) {
  switch (action.type) {
    case "ADD":
      return state + action.data;
      break;
    case "DEL":
      return state - action.data;
      break;
    default:
      return state;
      break;
  }
}
  • store.js
import { createStore } from "redux";
import { data } from "./reducer";
export var store = createStore(data);
  • action.js
//增加
export const add = (num) => {
  return { type: "ADD", data: num };
};
//减少
export const del = (num) => {
  return { type: "DEL", data: num };
};

  • home 组件
import React, { Component, Fragment } from "react";
//引用 store
import { store } from "../redux/store";
//引用action
import * as action from "../redux/action";
class Home extends Component {
  constructor(props) {
    super(props);
    //读取数据
    this.state = {
      num: store.getState(),
    };
  }
  componentDidMount() {
    store.subscribe(() => {
      this.setState({
        num: store.getState(),
      });
    });
  }
  render() {
    return (
      <Fragment>
        <div>home</div>
        {this.state.num}
        <button
          onClick={() => {
            store.dispatch(action.add(1));
          }}
        >
          点我加1
        </button>
        <button
          onClick={() => {
            store.dispatch(action.del(1));
          }}
        >
          点我减1
        </button>
      </Fragment>
    );
  }
}

export default Home;

更多文章链接

前端之React学习(一)
前端之React学习(三)
前端之React学习(三)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 是一个开源前端 JavaScript 库,用于构建用户界面,尤其是单页应用程序。它的主要特点包括使用 Virtual DOM 而不是真实的 DOM 来降低真实的 DOM 操作成本,支持服务端渲染,遵循单向数据流或数据绑定,以及使用可重用/可组合的 UI 组件开发视图。 在 React 中创建组件有两种方法:函数组件和类组件。函数组件是最简单的方式,它是纯 JavaScript 函数,接受 props 对象作为第一个参数并返回 React 元素。类组件则是使用 ES6 类来定义,它继承自 React.Component,并实现 render 方法来返回 React 元素。根据实际需求,可以选择使用函数组件或类组件。 React 的优点包括使用 Virtual DOM 提高应用程序性能,易于读写的 JSX 语法,支持客户端和服务端渲染,易于与其他框架集成,以及方便编写单元与集成测试。然而,React 也有一些局限性,例如它只是一个视图库而不是完整的框架,对于初学者来说有一定的学习曲线,需要额外的配置来集成到传统的 MVC 框架中,以及代码复杂性随着使用内联模板和 JSX 增加而增加。 希望这些信息可以帮助你在前端面试中了解 React。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [react前端面试题整合](https://blog.csdn.net/zerogf/article/details/105554272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值