React 实战 Todolist (下)

写在前面

最近在学 react ,所以就顺手写一个 Todolist 作为练手项目。
github 地址 : ReactMall

这篇是下,上篇是在这里 React 实战 Todolist (上)

1. 备忘录主体开发

这一篇我们来讲讲这个中间部分是怎么做的

在这里插入图片描述
这里我们是直接采用antdpro的组件,非常的方便简洁。

1.1 初始化数据

首先获取用户的list

因为我们之前在request中已经添加过拦截器了,所以这里就不需要自己手动加Authorization了

export const TaskListApi = (params) => request.get("/tasks", { params });

然后我们直接带上参数(分页的限制)请求即可

const getList =(num)=>{
        TaskListApi({
            start:num,
            limit:pageSize,
        }).then(res=>{
            if (res.status === 200 && res.data.item !== null ){
                res.data.item.map(item=>{item.start_time = moment(parseInt(item.start_time)*1000).format("YYYY-MM-DD HH:mm:ss");})
                setDataSource(res.data.item)
                setTotal(res.data.total)
                setCurrent(num)
            }else if (res.status!==200){
                message.error(res.msg).then()
            }
        })
    }

初始化时候的请求列表

// 请求文章列表
useEffect(()=>{
    getList(current)
},[])

1.2 列表渲染

直接渲染prolist列表就可以了。

<ProList rowKey="id"
headerTitle="我的备忘录"
dataSource={dataSource}
showActions="hover"
toolBarRender={() => {
    return [
        <TaskForm onCreate={()=>{
            getList(current)
        }}/>
    ];
}}
editable={{
		onSave: async (key, record, originRow) => {
		updateList(record)
		return true;
        },
        onDelete: async (key, record, originRow) => {
            deleteList(record)
            return true;
        },
    }}
onDataSourceChange={setDataSource} metas={{
title: {
    dataIndex: 'title',
},
description: {
    dataIndex: 'content',
},
subTitle: {
    dataIndex: 'start_time',
    render: (_, row) => {
        return (<Space size={0}>
                <Tag>
                    {row.start_time}
                </Tag>
        </Space>);
    },
    search: false,
},
actions: {
   render: (text, row, index, action) => [
       <a onClick={() => {
           action === null || action === void 0 ? void 0 : action.startEditable(row.id);
       }} key="link">
           编辑
       </a>,
   ],
},
}}/>

2. 新建任务

其实这里就是一个button然后打开弹窗的接口而已。

在这里插入图片描述

我们在src下新建一个文件

在这里插入图片描述

model 里面是一个 form 表单。

<Modal
wrapClassName="modal-wrap"
  okText="提交"
  cancelButtonProps={{ shape: 'round' }}
  okButtonProps={{ shape: 'round' }}
  width={600}
  open={visiable}
  title="新建任务"
  onCancel={close}
  onOk={submit}
>
  <div className="form">
      <Form form={form} labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} onFinish={onSubmit}>
          <Form.Item
              label="标题"
              name="title"
              rules={[{ required: true, message: 'Please input title!' }]}
          >
              <Input />
          </Form.Item>
          <Form.Item
              label="内容"
              name="content"
              rules={[{ required: true, message: 'Please input content!' }]}
          >
              <Input />
          </Form.Item>
      </Form>
  </div>
</Modal>
  • 提交form表单
const onSubmit = (values) =>{
  let { title,content } = values;
   TaskCreateApi({
       title:title,
       content:content}).
   then(res =>{
       if(res.status===200){
           message.success(res.msg).then()
       }else{
           message.error(res.msg).then()
       }
       if (onCreate){
           onCreate()
       }
   })
   form.resetFields();
   close()
}

这里我们需要把当前页面的getList函数和current传进去,然后当我们创建完之后,再一次渲染列表。这里就是父组件给子组件传值了。

在这里插入图片描述

const onSubmit = (values) =>{
	let { title,content } = values;
	TaskCreateApi({
	    title:title,
	    content:content}).
	then(res =>{
	    if(res.status===200){
	        message.success(res.msg).then()
	    }else{
	        message.error(res.msg).then()
	    }
	    if (onCreate){
	        onCreate()
	    }
	})
	form.resetFields();
	close()
}

3. 分页组件

我们可以直接使用antd的分页组件。

  • current 表示当前页码
  • pageSize 表示当前页数
  • total 表示总数
<Pagination style={{float: 'right',marginTop: '20px'}}
	onChange={onChange}
	 showTotal={(total) => `Total ${total} items`}
	 total={total}
	 current={current}
	 pageSize={pageSize} />
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生凡一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值