zoukankan      html  css  js  c++  java
  • 使用useReducer 实现 todoList

    // useReducer 实现 todoList
    import React,{ useReducer,useRef } from 'react'
    import './index.less'
    
    function todoList() {
      const inputRef = useRef();
    
      /*
        https://react.docschina.org/docs/hooks-reference.html?#usereducer
        useState 的替代方案。
        它接收一个形如 (state, action) => newState 的 reducer,并返回当前的 state 以及与其配套的 dispatch 方法。
        (如果你熟悉 Redux 的话,就已经知道它如何工作了。)
      */
    
      const [items, dispatch] = useReducer((state,action) => {
        switch(action.type){
          case 'add':
            return [
              ...state,
              {
                id:state.length,
                name:action.name
              }
            ]
          case 'remove':
            return state.filter((_,index) => index != action.index)
          case 'clear':
            return [];
          default:
            return state;
        }
      },[])
    
      function handleSubmit(){
        dispatch({
          type:'add',
          name:inputRef.current.value
        });
        inputRef.current.value = '';
      }
    
      return (
        <>
          <div>
            <input ref={inputRef}/>
            <button onClick={() => handleSubmit()}>添加</button>
            <button className="is-danger" onClick={() => dispatch({type:'clear'})}>清空</button>
          </div>
          <ul>
            {items.map((item,index) => (
              <li key={item.id}>
                {item.name}
                <button onClick={() => dispatch({type:'remove',index})}>删除</button>
              </li>
            ))}
          </ul>
        </>
      )
    }
    export default todoList;
  • 相关阅读:
    谷粒商城心得(四)
    centos7设置rc.local开机执行命令
    密码学简介
    如何解决 kubernetes 重启后,启来不来的问题
    谷粒商城安装ES及入门(十六)
    谷粒商城读写分离(十五)
    谷粒商城创建mysql主从(十四)
    虚拟机LVM在线扩容
    Builder 模式初探
    Mysql 导入实战
  • 原文地址:https://www.cnblogs.com/-roc/p/15137508.html
Copyright © 2011-2022 走看看