返回文章列表

文章

JavaScript全栈开发(十)

在Task workflow中实现Thunk以及完成我们的App

部分内容超过 Notion API 单页读取上限,已尽力加载可访问内容。

目录
  1. Your Tasks
  2. You have no tasks
  3. 4、添加主页的taskList路由
  4. 5、更新TaskForm的显示样式
  5. 6、最终的效果如下图所示
  6. 📝Deleting tasks
  7. 1、添加删除按钮
  8. 2、添加API的调用逻辑
  9. 3、添加状态管理
  10. 4、引入删除按钮的事件处理函数deleteTask
  11. 5、最终显示效果
  12. 📎 参考文章
# 📝Create task with Async Thunk 上一章末尾我们指定了submit按钮的处理函数creatTask,但是没有实现,现在来实现它们 ## 1、在taskSlice中添加createTask的具体逻辑 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/18718733-cc6a-41aa-9a1b-fe7721fea3ab/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=2103691fcba502610306504c30d4b27f9372c83c73620720e54e512abed64bbb&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## 2、在taskService中添加creatTask调用后端API的逻辑 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/8157d969-6a5f-4f8c-b3ba-f1a2ccd62be5/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=362536499e469dfacc61401d934ad4524c7f6c2a1d53fbed0af982486ab2ca51&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## 3、在taskSlice中添加extraReducers ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/5d71aeca-e357-4bd1-9279-15efcece200c/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=acc8128fe699151a061b8ef3e04510ab84ba109ce0cbcc1df6f2d6a0c6d22059&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## 4、creatTask功能验证 在输入框中属于任意的文本:例如“Learn PE”,会显示类似如下的数据 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/d8c43110-724b-49ae-98e4-0dc9d9d2c60e/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=80ff08d6d051d106413b554a7cb3703cb3cee1a922a92f265cb6908c4711cb5c&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) 数据库中也能查询到相应的数据 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/e3b2b235-545b-4484-aa5f-0cc96144b955/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=41c08566489d310649cdd24fb357c83871004bc40c50cfd71610dad5771c44c5&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) # 📝Fetching tasks form the server 上面已经写了getTask中模板代码,现在完善从后端API获取数据的业务逻辑,具体的流程和create Task相同 ## 1、在taskService中创建getTask的调用后端API的逻辑 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/e10a00ef-977a-4a49-817f-ffdf7f1c7d1a/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=26d2d40842185806dd249e760ee093c9a3558b9fe02868fa1d58a65824e74e03&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## 2、在taskSlice中创建getTask的asyncThunk ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/1910df42-3f36-4603-86aa-b01f6210eb03/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=492d8f36ba1285b98e1d9b75ff94db93e300d665653451b621dea74500bf12ca&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## 3、在taskSlice中增加getTask的状态管理 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/28f0bd4a-da06-40b6-b779-184f52bba461/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=6cb06ef6277cfbc7e232a563c0b871660b14ac8a7485709d2db30a1cb0c4e0fe&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) # 📝Displaying tasks ## 1、在Dashboard增加task的显示入口 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/112951c1-11ab-4582-bb96-510ffca5ef08/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=8a05833e58a1bf81308317c525c27f38c982e79898952660c5907e7950fe9106&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) 也买了显示效果如下: ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/24e3cc96-d906-4854-8295-2205a82d600d/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XVFLOHRD%2F20260827%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260827T173353Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHEaCXVzLXdlc3QtMiJGMEQCIH275AYOPE8tuep9m3Qmm2dvWVO3U3edM7drncqX3V%2BFAiARNriBEKFB2tfN2LRZ1xzMCn8gJkvsE7Bv0JoXzTafFir%2FAwg6EAAaDDYzNzQyMzE4MzgwNSIMtdaVhGdXbRP1y31OKtwDMDrvNKii58zZG7cdcIq3zKqQzAymkhyifHqR21vjdz5Ut4iuSJWm3Oy8ZpLfox%2FSzMGg7KOnifRsGrTWpqVXwKHoJB%2FtGRzPyPn%2Bja3uHFzytkBZ14yRqDsXyxwB5JcZlaCLM6keANRjHCoUbFhhxjiEj02YdF0ycIViSKDNCk8g0DXIrHYJZHZ%2Fp3tITUrol7IJkmMZRaQ68NaNgzuXU75gQc0KiUA6JGB%2FJu1Yn3CjTSPVRf9BUxwpZNQN3Okc1YmBreFeLdSoRVy%2FqRv%2Bl3NJtSBedJQ9nhgi2FimF%2FbPbDgp%2FEqc5z%2BEF59rtuOrz5GGsHy%2BfsZnNwEauauWpQe%2BAg8jtsCr7wL24kDXFtCM4EhdbIOYPK9QNojEOuf5Sh4vFpY5pPjT8qatE1SIoG6lqdYjvXLjr5QiaAd22Lc8dk0fzvFmKzdwZdmGiXgQVfHaIjvbP0G%2B0n1eAfgxTb81K%2F0TKnlxRjLc8dJy9Qem9mKMbfqZdk%2F651d5l51hTsFY4XXYwgr3pBqr1U%2BsbrpehoX1OeXksTaT%2FDgB9RwubrFf78iowRj0nz7SQFqxqNLG319s93pWJbrH8T3Oz%2FxlezXVVCSb3rJYZdRMCdpFeGEol3ZhlOtqc34wks%2FB1AY6pgEkTxh1T1wLByu5%2By5qTpfOI1pAEJhl53qGKIPK1M2g05gmip%2Fqw8zvP6772zZf1bXXVQ%2FmBwlQYT3THJStiwc3276cViRefikp12OsHDPlhZ8CCF7UCTCT4t6p%2B5J%2FaX6xoPDjV%2BKf%2Fd%2FMfncMV51uU7ArVlXY0Ku5lIRyoRoaXCfiOTml5f4bsn5dywPJ6CTiDaVyGir%2BIwOPO%2BWWpNFs63FJPMtd&X-Amz-Signature=c9fa56df34b5d5b16a0f2791a41fa3ce026d372ce7d09259029d8c6b0d35139a&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject) ## 2、创建TaskList component ```go import { useEffect } from "react"; import { useSelector, useDispatch } from "react-redux"; import { getTasks, reset } from "../features/task/taskSlice"; import TaskItem from "./TaskItem"; import Spinner from "./Spinner"; import { useNavigate } from "react-router-dom";

const TaskList = () => { const navigate = useNavigate(); const dispatch = useDispatch();

const { tasks, isLoading, isError, message } = useSelector( (state) => state.tasks );

useEffect(() => { if (!user) { navigate("/login"); }

if (isError) {
  console.log(message);
}

dispatch(getTasks());

return () => {
  dispatch(reset());
};

}, [navigate, isError, message, dispatch]);

return ( <>

Your Tasks#

Welcome to your task list

{isLoading ? ( ) : tasks.length > 0 ? (
{tasks.map((task) => ( ))}
) : (

You have no tasks#

)} </> ); }; export default TaskList; // The TaskList component is responsible for displaying the list of tasks. // It uses the useSelector hook to access the tasks from the Redux store. // It also uses the useDispatch hook to dispatch actions to the Redux store. // The component fetches the tasks when it mounts and displays them in a list. // If there are no tasks, it displays a message indicating that. // The component also handles loading and error states. // The TaskList component is a functional component that displays a list of tasks.

## 3、创建TaskItem component
```go
import { useDispatch } from "react-redux";

const TaskItem = ({ task }) => {
  return (
    <div className='task'>
      <div>
        {new Date(task.createdAt).toLocaleString("en-US", {
          month: "long",
          day: "numeric",
          year: "numeric",
          hour: "2-digit",
          minute: "2-digit",
        })}
      </div>
    </div>
  );
};
export default TaskItem;

4、添加主页的taskList路由#

5、更新TaskForm的显示样式#

6、最终的效果如下图所示#

📝Deleting tasks#

其实流程和上面的一样,添加删除按钮、添加API的调用逻辑,添加状态管理

1、添加删除按钮#

添加了一个删除按钮和一个按钮的事件处理函数deleteTask(先占位后面再实现)

2、添加API的调用逻辑#

taskSlice.js的异步调用 taskService.js中的具体API调用

3、添加状态管理#

taskSlice.js

4、引入删除按钮的事件处理函数deleteTask#

5、最终显示效果#

点击 右上角的“X”就是删除“Task”

📎 参考文章#

未支持的 Notion 内容:external_object_instance 在 Notion 中打开