zoukankan      html  css  js  c++  java
  • react-hooks简单同步异步处理小技巧

    import React, { useState, useEffect, useReducer } from 'react';
    import { useImmer } from "use-immer"
    import './App.css';
    
    
    function reducer(state: { count: number; }, action: { type: any; }) {
      switch (action.type) {
        case 'increment':
          return { count: state.count + 1 };
        case 'decrement':
          return { count: state.count - 1 };
        default:
          throw new Error();
      }
    }
    
    function App() {
      // 定义
      const [state, setState] = useImmer({
        people: [
          {
            name: '马云',
            englishName: 'Jack Ma'
          },
          {
            name: '马化腾',
            englishName: 'Pony Ma'
          },
          {
            name: '李彦宏',
            englishName: 'Robin Li'
          }
        ]
      })
    
      const [num, setNum] = useState(1);
    
      const [stateReducer, dispatchReducer] = useReducer(reducer, {count:999});
      useEffect(() => {
        console.log(num);
        //处理异步数据
      }, [num])
    
      useEffect(() => {
        console.log(state);
      }, [state.people[2]])
    
      const onClick = () => {
        setNum((num) => {
          console.log(num,"点击之前的变化");
          //处理异步数据
          return num = 2
        })
      }
      const onClick1 = () => {
        setState((state: { people: { name: string; }[]; }) => { state.people[2].name = '陈强' })
        console.log(state);//异步
      }
      const onClick2 = () => {
        dispatchReducer({ type:"increment"})
        console.log(stateReducer.count);//异步
      }
      return (
        <div className="App">
          <h1>我是useReducer----{stateReducer.count}</h1>
          <h1>{num}</h1>
          <ul>
            {state.people.map(item => <li key={item.englishName}>{item.name}</li>)}
          </ul>
          <button onClick={onClick}>点击</button>
          <button onClick={onClick1}>复杂数据处理</button>
    
          <button onClick={onClick2}>我要修改stateReducer</button>
        </div>
      );
    }
    
    export default App;
    

      

  • 相关阅读:
    毕业论文格式
    2018.12.14
    关于百度搜索引擎的优缺点
    2018.12.13
    2018.12.12
    2018.12.11
    2108.12.10
    2018.12.9
    2018.12.8
    2018.12.7
  • 原文地址:https://www.cnblogs.com/cq1715584439/p/12674689.html
Copyright © 2011-2022 走看看