• reactHooksuseState、useEffect、useReducer实例


    Hook

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

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

    useState、useEffect

    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概念。
    以上代码可修改为

    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>
      );
    }
    
    
  • 相关阅读:
    mac 使用指南
    客服系统引用方案
    CSS中margin和padding的区别
    NuGet学习笔记(1)——初识NuGet及快速安装使用
    百度搜索这些词:(百度搜索特效,好玩)
    sql语言:如何查询字符串某个字符的个数?
    Sql日期时间格式转换
    SQL获取当前时间(日期)
    Redis快速入门:初识Redis
    选择Key-Value Store
  • 原文地址:https://www.cnblogs.com/cupid10/p/15958068.html
Copyright © 2020-2023  润新知