React 实战 Todolist (下)

Posted 小生凡一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 />

以上是关于React 实战 Todolist (下)的主要内容,如果未能解决你的问题,请参考以下文章

React实战_实现待办事项TodoList(Hook版)

react实战·菜鸟版1. 用dva + antd 写一个todolist

react实战·菜鸟版1. 用dva + antd 写一个todolist

初探react,用react实现一个todoList功能

初探react,用react实现一个todoList功能

react新手demo——TodoList