Dvajs 官网实战:写一个列表,包含删除按钮,点删除按钮后延迟 1 秒执行删除。

1.index.js

import dva from 'dva';


// 1. Initialize
const app = dva();
// 2. Plugins
// app.use({});

// 3. Model
app.model(require('./models/products').default);

app.router(require('./router').default)

// 5. Start
app.start('#root');

2.router.jsx

import Products from './routes/Products';
import {Route,Router,Switch} from 'dva/router';
function RouterConfig({ history }) {
  return (
    <Router history={history}>
      <Switch>
        <Route path="/" exact component={Products} />
      </Switch>
    </Router>
  );
}

export default RouterConfig;

3.models/products.js

const delay=(time)=>{
  return new Promise(resolve=>setTimeout(resolve,time))
}
export default {
    namespace: 'products',
    state: [
      { name: 'Hello', id: 1 },
      { name: 'world', id: 2 },
    ],
    reducers: {
      del(state, { payload: id }) {
        return state.filter(item => item.id !== id);
      }
     
    },
    effects:{
      *delAfter1Second(action,{put,call}){
        yield call(delay,1000);
        yield put({type:'del',payload:action.payload})
      }
    }
  };

4.routes/Products.jsx

import React from 'react';
import { connect } from 'dva';

const Products = ({ onDelete, products }) => {
  return (
    <div>
      <h2>Todos</h2>
      {/* <ProductList onDelete={onDelete} products={products} /> */}
      <ul>
      {
        products.map(product => (
          <li>
            {product.name}
            <button onClick={() => onDelete(product.id)}>删除</button>
          </li>
        ))
      }
      </ul>
    </div>
  );
};

// export default Products;
export default connect((state) => ({
  products: state.products
}), (dispatch) => ({
  onDelete(id) {
    return dispatch({
      type: 'products/delAfter1Second',
      payload: id,
    });
  }
}))(Products);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值