react--Hooks--useState、useEffect、useReducer实例

news/2024/7/15 17:12:43 标签: react.js, javascript, 前端

Hook

Hook是React16.8⼀个新增项,它可以让你在不编写 class 的情况
下使⽤ state 以及其他的 React 特性。
Hooks的特点:

  • 使你在⽆需修改组件结构的情况下复⽤状态逻辑
  • 可将组件中相互关联的部分拆分成更⼩的函数,复杂组件将变得更容易理解
  • 更简洁、更易理解的代码
    在这里插入图片描述

useState、useEffect

javascript">import React, { useState, useEffect } from "react";
function FruitList({ fruits, setFruits }) {
// 点击删除
  const delFruit=(delIndex)=>{
       const tem = [...fruits];
       tem.splice(delIndex, 1);
       setFruits(tem);
  }
  return (
    <div>
      <ul>
        {fruits.map((item, index) => {
          return <li key={index} onClick={()=>delFruit(index)}>{item}</li>;
        })}
      </ul>
    </div>
  );
}
function UseState() {
  const [date, setDate] = useState(new Date());
  const [fruits, setFruits] = useState(["苹果", "香蕉"]);
  const [name, setName] = useState("车厘子");
  useEffect(() => {
    const timer = setInterval(() => {
      setDate(new Date());
    }, 1000);
    //记得清理工作,防⽌引起内存泄露
    return () => clearInterval(timer);
  }, [date]);
  return (
    <div>
      <p>{date.toLocaleTimeString()}</p>
      <input value={name} onChange={(e) => setName(e.target.value)} />
      //添加也就是数组合并
      <button onClick={() => setFruits([...fruits,name])}>添加</button>
      //列表显示
      <FruitList fruits={fruits} setFruits={setFruits} />
    </div>
  );
}

export default UseState;

useReducer、useEffect

useReducer是useState的可选项,常⽤于组件有复杂状态逻辑时,类似于redux中reducer概念。
以上代码可修改为

javascript">import React, { useEffect, useReducer } from "react";
function FruitList({ fruits, setFruits }) {
  const delFruit = (delIndex) => {
    const tem = [...fruits];
    tem.splice(delIndex, 1);
    setFruits(tem);
  };
  return (
    <div>
      <ul>
        {fruits.map((item, index) => {
          return (
            <li key={index} onClick={() => delFruit(index)}>
              {item}
            </li>
          );
        })}
      </ul>
    </div>
  );
}
function fruitsReducer(state, action) {
  switch (action.type) {
    case "init":
    case "replace":
      return action.list;
    default:
      return state;
  }
}

export default function HooksReducer() {
  const [fruits, dispatch] = useReducer(fruitsReducer, []);

  useEffect(() => {
    setTimeout(() => {
      dispatch({ type: "init", list: ["apple", "banana"] });
    }, 1000);
    return () => {};
  }, []);
  return (
    <div>
      HooksReducer
      <FruitList
        fruits={fruits}
        setFruits={(newFruitList) =>
          dispatch({ type: "replace", list: newFruitList })
        }
      />
    </div>
  );
}


http://www.niftyadmin.cn/n/509507.html

相关文章

【Redex】使用及案例分析

文章目录一、基本使用二、案例分析&#xff1a;2.1、不用 Redex2.2、使用 Redex2.3、知识点总结&#xff1a;2.4、Redux 异步操作2.5、改写计数器2.6、知识点总结一、基本使用 在组件中展示一个按钮&#xff0c;点按钮后给redux中的数字9&#xff0c;数字初始为0,。实现一个计数…

react中hooks--useContext用法

useContext⽤于在快速在函数组件中导⼊上下⽂。 import React, { useContext } from "react"; const Context React.createContext(); const Provider Context.Provider; export default function HookContext() {const store {userName: "xiaoming",}…

【React】react-redux 案例

文章目录1. react-redux2. 改写计数器3. 知识点总结4. 优化计数器5. 优化总结1. react-redux react-redux 将所有组件分成两大类&#xff1a; UI 组件&#xff08;presentational component&#xff09; 容器组件&#xff08;container component&#xff09;UI组件容器组件作…

ant design 按需加载

配置按需加载 安装react-app-rewired取代react-scripts&#xff0c;可以扩展webpack的配置 &#xff0c;类似vue.config.js 在根目录下创建config-overrides.js const {override,fixBabelImports, } require("customize-cra");module.exports override(fixBabelI…

【React】JSX 语法及原理

文章目录一、JSX 原理分析1.1、案例分析1.2、作用总结二、JSX 语法使用2.1、插值表达式2.2、属性绑定2.3、数组渲染一、JSX 原理分析 要明白JSX的原理&#xff0c;需要先明白如何用 JavaScript 对象来表现一个 DOM 元素的结构 <div classapp idappRoot><h1 classtit…

react插槽--默认插槽,具名插槽

不具名插槽 Props.js import Layout from "./Layout"; // 函数式组件传值 export default function Props() {return (<Layout title"函数式传值"><div><h3>函数式传值</h3><p>不具名插槽</p></div></Layou…

【React】props 属性用法

Props进阶一、基本用法1.1、类组件中使用1.2、函数组件使用二、children 属性三、props-type 包的使用3.1、PropTypes 检查类型3.2、defaultProps 设置默认值一、基本用法 主要作用是让使用该组件的父组件可以传入参数来配置该组件。它是外部传进来的配置参数&#xff0c;组件内…

React 父子组件数据变化实时更新

父组件数据变化&#xff0c;子组件数据更新方法&#xff1a; 利用componentWillReceiveProps方法 componentWillReceiveProps(nextProps){this.setState({isLogin: nextProps.isLogin,userInfo: nextProps.userInfo,});}子组件数据变化&#xff0c;通知父组件 // 父组件&…