React-useReducer简单使用

一、Fruit.js

import React, { useState } from 'react';

export function FruitList({ fruits, onSetFruits }) {
    const del = delIndex => {
        const tem = [...fruit];
        tem.splice(delIndex,1);
        onSetFruits(tem);
    };
    return (
        <div>
            <h2>水果列表</h2>
            <ul>
                {
                    fruits.map((item,index) => {
                        return (
                            <li key={index} onClick={() => del(index))>
                                {item}
                            </li>
                        )
                    })
                }
            </ul>
        </div>
    )
}

export function FruitAdd(props) {
    const [name, setName] = useState('');
    return (
        <div>
            <h2>增加水果</h2>
            <input type='text' value={name} onChange={e => setName(e.target.value)}/>
            <button onClick=(() => props.onAdd(name))>增加</button>
        </div>
    )
}

二、FruitReducer.js

import React, { useReducer, useEffect } from 'react';
import { FruitList, FruitAdd } from './Fruit';

function fruitReducer(state, action){
    switch(action.type) {
        case 'init':
        case 'replace':
            return action.payload;
        case 'add':
            return [...state, action.payload];
        default:
            return state;
    }
} 

export default function HookReducer(){
    const [fruits, dispatch] = useReducer(fruitReducer,[]);
    useEffect(() =>{
        setTimeOut(() => {
            dispatch({
                type: 'init',
                payload: ['apple','banana']
            });
        }, 1000);
    }, []);

    return (
        <div>
            <h1>User</h1>
            <FruitAdd onAdd={(item) => {dispatch({type: 'add', payload: item})}}/>
            <FruitList fruits={fruits} onSetFruits={cur => dispatch({type: 'replace',payload: cur})}
        </div>
    )
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值