使用react-router+hooks搭建基础框架(代码片段)

thyong thyong     2022-12-03     299

关键词:

前言

最典型的一个react项目就是react-router+redux(可能再加上redux-thunk或saga),在hooks出来之后,redux也同步跟进加了很多hooks,但已经可以完全抛弃redux,仅仅使用useReducer等hooks来管理数据流了(大型、复杂项目的话,目前还是推荐redux)

步骤

前文中已经配置好webpack了,接下来让我们配置react-router以及reducer

react-router

先安装依赖:

npm i -S react-router-dom react-helmet

react-router-dom是基于react-router的库,里面加入了一些在浏览器运行环境下的功能,例如:Link、BrowserRouter、HashRouter。而其他的一些组件则是直接从react-router中导出的,例如:Switch、Route等等。
react-helmet用来动态改变title

路由及布局

路由及布局,就跟我们平时写的react应用是一样的,先写个最简单的就行,就不详细展开了,具体看代码即可,主要新增了3个文件:

  • routes.js 定义路由
  • layout 定义布局
  • RouteWithSubRoutes react-router的嵌套路由组件

插曲

写了几个基础页面后,发现报这种错:

Module not found: Error: Can‘t resolve ‘core-js/modules/es.array.slice‘ 

看了一下package.json,果然,遗漏安装core-js了,因为@babel/preset-env依赖core-js,会跑到当前项目下去寻找core-js
因为用到的是core-js3,所以我们安装core-js3:

npm i core-js@3

redux

接下来就是全局状态管理,以往我们都是用redux及react-redux,不过在有了useReducer和useContext之后,已经可以替代了

在hooks之前createContext配合Context.Consumer也能读取全局状态,只不过很不方便,这篇文章讲的不错

简单来说,使用useReducer和useContext来接管redux,主要有3步,示例代码如下:

  1. createContext创建一个全局context
    js const Store = createContext(initState);

  2. 使用上一步的context,导出Provider组件,value中传入useReducer的state及dispatch

const [state, dispatch] = useReducer(reducer, initState);
return <Store.Provider value=state, dispatch>
</Store.Provider>

接下来就是传统的写法了,dispatch(action()),显然每个页面都这么写的话,还是挺繁琐的
如果能像vue那样mapAction,直接调用action,那就方便多了

redux4中有一个bindActionCreators,跟mapAction作用类似传入action和dispatch,返回一个直接调用的action
而且代码多了之后,肯定是需要拆分reducer及action的,所以我们可以这样进行拆分:

  • 建一个reducers文件夹
  • 一个业务对应一个reducer文件,每个文件里定义actions、reducers
  • 新增一个builder文件,遍历处理,将actions用dispatch包一层,reducers则简单合并,最后导出新的actions、一个新的root reducer

结构如下:

- redux
    - reducers
        - global.ts
        - todo.ts
        - index.ts
    - builder.ts
    - store.tsx
  1. 创建一个useRedux hooks,快捷使用state、dispatch
    const state, dispatch, actions = useContext(Store);

更具体的代码就不一行行展示了,在tag-v2中可以详细查看

小结

可以看到,createContext+useContext+useReducer这3个react内置的api,已经足够应对小型项目的全局状态管理了







react基础语法复习1-搭建开发环境

...了,这次跟着脚手架工具系统的复习一遍。顺便学习学习react-router和redux首先,脚手架工具我使用的是create-react-app,这个是官方出的,感觉比较靠谱。不过真实使用起来感觉比vue-cli复杂,webpack配置文件都在node_modules文件夹里面,... 查看详情

springboot+mybatis+react+redux+react-router+antd+typescript:react+typescrip项目的搭建

前言:           后台搭建完以后开始搭建前端,使用create-react-app搭建项目非常方便。          前端主要是如何向后台请求数据,以及如何使用redux管理st 查看详情

pytorch基础(17)--hooks机制※(代码片段)

前言网络上关于PyTorch如何使用Hook机制的教程良莠不齐,大多是开门见山直接扔给你一个案例讲解如何使用Hook的,而为什么使用Hook,引入Hook的原因并没有说清。最后决定从0开始学习Hook机制,并尝试写一篇详细的... 查看详情

pytorch基础(17)--hooks机制※(代码片段)

前言网络上关于PyTorch如何使用Hook机制的教程良莠不齐,大多是开门见山直接扔给你一个案例讲解如何使用Hook的,而为什么使用Hook,引入Hook的原因并没有说清。最后决定从0开始学习Hook机制,并尝试写一篇详细的... 查看详情

react-router学习笔记(代码片段)

...9;。1、查看源码姿势1.1代码仓库https://github.com/ReactTraining/react-router2.2包说明react-router公共基础包react-router-dom在浏览器中使⽤,依赖react-routerreact-router-native在react-native中使用,依赖react-router2.3源码位置react-router源码位置rea... 查看详情

360hook表,hook过滤架构搭建

分析了一下360的HOOK,通过直接hook KiFastCallEntry实现以所有系统调用的过滤。我分析的版本如下:主程序版本: 6.0.1.1003HookPort.sys版本: 1, 0, 0, 1005HookPort.sys的TimeStamp: 4A8D4AB8简单说明:360把所有被hook的系统服... 查看详情

pytorch基础(17)--hooks机制※(代码片段)

前言网络上关于PyTorch如何使用Hook机制的教程良莠不齐,大多是开门见山直接扔给你一个案例讲解如何使用Hook的,而为什么使用Hook,引入Hook的原因并没有说清。最后决定从0开始学习Hook机制,并尝试写一篇详细的... 查看详情

react全家桶从0搭建一个完整的react项目(react-router4reduxredux-saga)

...搭建一个完整的react项目。文中针对react、webpack、babel、react-route、redux、redux-saga的核心配置会加以讲解,通过这个项目,可以系统的了解react技术栈的主要知识,避免搭建一次后面就忘记的情况。 从webpack开始思考一下webpack... 查看详情

react-router介绍及使用

参考技术AReact-Router4.0版本之前安装React-Router4.0版本之后安装在React-Router4.0开始,官方提供一个基础的路由react-router。目前使用的版本获取path的参数Route里面component和render这两个属性的使用:<Link/>里面的to属性是一个对象,... 查看详情

react——在函数组件中使用路由——利用hook函数完成路由切换——table表格的基础使用(代码片段)

react——在函数组件中使用路由第一种方法:安装:react-router-dom因为是函数组件,所以需要用withRouter包裹导出importwithRouterfrom"react-router-dom"constApp=()=>return(<div><h1>APP</h1&g 查看详情

[react-router]react-router的实现原理是什么?(代码片段)

[react-router]React-Router的实现原理是什么?1.react-router依赖基础-history,是一个独立的第三方js库,可以用来兼容在不同浏览器、不同环境下对历史记录的管理,拥有统一的API。具体来说里面的history分为三类:HashRouter&#... 查看详情

一库让你快速搭建redux。auto-redux,跟普通hooks一样使用redux。(代码片段)

前言:借鉴于组内大佬开发的一个库的思路。redux使用过redux的同学应该知道,redux每一个状态都需要编写特定的action和reducer,通过react-redux提供的hooks,useDispatch,useSelector去获取状态,派发aciton。比较麻烦... 查看详情

react16+react-router4从零打造企业级电商后台管理系统

第1章课程介绍本章整体介绍该课程的内容,让同学们了解这个课程的特点和学习方法,以及后台管理系统开发前的一些前置工作,如需求分析、技术选型和数据接口等。第2章课前知识储备本章介绍一些后面课程要用到的一些基... 查看详情

virtualappjava层hook基础(代码片段)

VirtualAppJava层Hook基础-反射注入Hook技术是VirtualApp(后续简称VA)的核心实现原理之一。0x00.什么是HookHook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后࿰... 查看详情

react-router学习笔记

前言:  本文为个人学习react-router的总结。包括路由基础配置,跳转,权限管理,组件与路由配置的关系,代码分割。欢迎交流指导。一、路由基础  1.路由配置 &显示路由组件的view(类比angular的ui-view)  路由配... 查看详情

react-router4的新玩意儿

...的,拿出来说一说。本文只讨论针对浏览器的应用,使用react-router-dom(在react-router基础上封装了一些高级组件)进行说明。关于BrowserRouter:如果按照原来的使用方式,就掉进第一个坑里了:history不合法。用react 查看详情

react路由基础(代码片段)

HashRouter模式: BrowserRouter模式:  分享:前言react-router针对不同的使用场景衍生了不同的路由包,RN项目用react-router-native,web项目用react-router-dom。并且,不需要再重复引入react-router了。我搭建的是web项目环境,所以用... 查看详情

react-router学习笔记

前言:  本文为个人学习react-router的总结。包括路由基础配置,跳转,权限管理,组件与路由配置的关系,代码分割。欢迎交流指导。一、路由基础  1.路由配置 &显示路由组件的view(类比angular的ui-view)  路由配... 查看详情