返回文章列表

文章

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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=f60b5c6a53d8695a56b61c4085440c8c3e59e292f06244afea8b1d6b1bb7afbd&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80e4-8c14-f0b28ba93288.4b1b167f-4b52-4031-8233-f4f2689af574) ## 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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=7ff9ef42e6233c0f354d905920f9dd35a00918b2893bc0962bcfd6a4fd472ad5&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80b7-bfda-e46d1cfc9942.4b1b167f-4b52-4031-8233-f4f2689af574) ## 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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=20d28b6f53d803a5840cccd9d2dc2503d05cac6ef39f04ce62b9e09023b21bfc&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80e5-b880-c520c95e2755.4b1b167f-4b52-4031-8233-f4f2689af574) ## 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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=c54b11d9fd78f7c516b0538a60f040a390e7f0d38afc0026a5bbf002121ab014&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80fe-acd0-eb2315a3464e.4b1b167f-4b52-4031-8233-f4f2689af574) 数据库中也能查询到相应的数据 ![](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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=0ea8e0672eabae82d0314f8b475b0f21a81ad3b69607ca3cd41caa6147909388&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-805b-b543-dee0c1a9c6cf.4b1b167f-4b52-4031-8233-f4f2689af574) # 📝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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=ddfcb4f1d64f2d41b6646c54fcdd40fb25cce9a4e1266c21a6825dc79f720a43&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80b5-a68c-c6e0363dd545.4b1b167f-4b52-4031-8233-f4f2689af574) ## 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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=335b24f46ab64ea31368bebeb60ccc2d1da43c6e05674b05852f7b1b7e282db4&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80c4-9bd5-e91d980a52a0.4b1b167f-4b52-4031-8233-f4f2689af574) ## 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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=64264a7c0dc4a8d85303c3c3c1485596e517f0feed7203f057025a22fec5828f&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-801c-88ba-db40f2e56307.4b1b167f-4b52-4031-8233-f4f2689af574) # 📝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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=27f0dab753ee84a3b11a680725596b1095b7d282062b6b063ec85e6e79341a70&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-8034-b2b3-ded1abddc977.4b1b167f-4b52-4031-8233-f4f2689af574) 也买了显示效果如下: ![](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=ASIAZI2LB466Q6TFFTLM%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T214021Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJHMEUCIQDex13WeCWhBh038DH58GD9%2B9SunOks3JALYthpgREpFgIgU%2BXwG5v7ECyaibylKfTN%2BgK6fsN6hLuiDeAlG2nCbVMqiAQI6%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDCP%2FAkAirnXKH6sKxSrcA9tUq8bFlN5E7tXehyfujT1y3CI%2BT0qRoI%2BAtBMWRxb3Q4KSoupRVQ7ySOTC94wD%2Bt312R3VU7t9UcibkcOItuEfpxfnoM%2Btu4rN3iIUYhW9xbta%2B9Z0bohJ%2FO1BCS1v1btD9rE6TSoeBLdqOoYeo1Rp%2FHmDDxAVUHFGunjk2tV0IWcuMycH%2FhKQcUR3PE6lfhbf2TyzU%2Fi4HBgG7SrvjKVOj%2FTfgRIVjTFdB%2BVhF4esCAfihpG30TarQOqTDx4Y4w%2FlbhmemsWyJoQjly11ulmL9PfKUNhRT6XmfSVLP50Lt1KiEAlqZ7WwpYt0ZTx%2BoRkf6XutAUg%2B6A1cDq5Y3UMBI5SL6tEazUsdG4v5zoiF3z2xsCsvLdvybOmOST5slklO2ZsdAMXsjpAWhc6UF8GUr%2B56lEovdEICKa8n2ghr2QDoXEtIsEsPPgReTtMdx5b%2Fj4eiSsOQYRcYVngknAE717U%2FAsm4R3ZemeKdMy194CrORgNpo%2BYcQw1%2F6L2RaZhxbi07yAcjiNf%2BK56Q91YCDBnp8DLY07gAhcYrsORBaG96vNncadFRp6UfQSH8eqKJId52Lw1URwz5m2%2FUuhPXDwrsA1JyJV8UT6R0ySjsPaTyi9bVTO8zyZUjMNHrydYGOqUBHjgSqMizBV1oQ2%2BJxPZCEcZUZlhT05ysuLxnbJJOtcvpUNtXPTNuTGwGViHOEWP0O4ROxJUTfq78zTtD6SCQg3vbvrGZNdCOHPQTcrULVOOJxoElUO66VtP15w1J1k%2FUSFhATNgXxF%2FuTarTtfhRsn2PIhjlfYtOFMTDxKSDN%2B6Yx9FflSCQTpqzKJeVRhDD2uP%2F52vKNCOUS8zVsL2eWVBqPxi5&X-Amz-Signature=b535afb2579c08fbded55962bd8e2b4de537ee67e4312b66349989238894563d&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1ca5c571-bb7d-80bc-a62a-cf11530ca57e.4b1b167f-4b52-4031-8233-f4f2689af574) ## 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 中打开