React旅游网
2024-03-16 15:25:54 0 举报
AI智能生成
react基础知识学习完之后的练手项目,涉及到react路由(6)、redux、react-redux、react-tooltik等知识。
作者其他创作
大纲/内容
登录状态
购物车
购物车的内容在App.tsx中dispatch来获取,这样后面在任何页面就可以直接获取reducer中的数据了
购物车数据以及获取数据都保存在redux-tooltik中
动作(获取购物车数据、添加购物车、清空购物车、购物车页面点击下单支付都在同一个silce中)
数据:const initialState: shopingCartState = {
loading: false,
items: [], //购物车内容
error: false,
}
动作(获取购物车数据、添加购物车、清空购物车、购物车页面点击下单支付都在同一个silce中)
数据:const initialState: shopingCartState = {
loading: false,
items: [], //购物车内容
error: false,
}
UI:左边是购物车里的内容,利用组件<SearchProductList/>来显示,
右边是价格显示,利用组件<PaymentCard/>来显示。
右边是价格显示,利用组件<PaymentCard/>来显示。
逻辑:点击清空购物车分发clearShoppingCar()的action
点击下单支付跳转到nav('/placeorder'),同时分发一个action:
dispatch(checkout(jwt)),这个action分发完之后同时改变了最后订单的currentOrder的数据
点击下单支付跳转到nav('/placeorder'),同时分发一个action:
dispatch(checkout(jwt)),这个action分发完之后同时改变了最后订单的currentOrder的数据
注销
登陆成功之后,在首页Header中点击注销按钮,需要清空jwt(token),是全局的都需要清空,不止是Header中的,
所以逻辑是直接清空user/slice.ts中的jwt。故在此slice中再添加一个action,点击注销后就dispatch这个action
所以逻辑是直接清空user/slice.ts中的jwt。故在此slice中再添加一个action,点击注销后就dispatch这个action
未登录状态
切换语言
切换成中文或者英文
使用的是redux来获取语言状态的。具体操作如下:
1.创建数据中心store(要导入reducer)
2.创建reducer来修改数据
3.在Header组件中获取store中的语言相关数据。根据获取到的language来判断显示哪种语言。
4.在每次点击切换语言的时候还要再次分你发action来修改reducer中的语言数据。(需要订阅与推送subscribe)
(以上工作做完后出现的效果就是切换语言你的按钮显示中文或英文,显示添加新语言。)
1.创建数据中心store(要导入reducer)
2.创建reducer来修改数据
3.在Header组件中获取store中的语言相关数据。根据获取到的language来判断显示哪种语言。
4.在每次点击切换语言的时候还要再次分你发action来修改reducer中的语言数据。(需要订阅与推送subscribe)
(以上工作做完后出现的效果就是切换语言你的按钮显示中文或英文,显示添加新语言。)
redux:全局切换网站的语言,使用i18n:
根据redux中的数据,切换整个首页中的内容的语言形式。中文或英文的语言包保存在json文件中。
具体操如笔记中所写。
根据redux中的数据,切换整个首页中的内容的语言形式。中文或英文的语言包保存在json文件中。
具体操如笔记中所写。
注册
1、账号(邮箱形式)、密码(大小写字母、数字、特殊字符的组合),还需要确认密码即可注册成功,
注册成功后跳转到登录页面。
2、使用到UI组件:<Form></Form>
3、逻辑:只有注册跳转这些动作,没有涉及到额外的数据或功能,所以在自己页面发送请求,不涉及任何的redux
注册成功后跳转到登录页面。
2、使用到UI组件:<Form></Form>
3、逻辑:只有注册跳转这些动作,没有涉及到额外的数据或功能,所以在自己页面发送请求,不涉及任何的redux
登录
1、输入正确的账号、密码。点击登录即可登陆成功。
2、使用到的UI组件:主要是表单组件。import { Button, Checkbox, Form, Input } from 'antd';
3、逻辑:采用的是jwt登录,发送登录请求,登陆成功后会返回一个token,这个token会在多处用到,所以token数据
保存在redux(使用react-tooltik)中,redux/userSlice/slice.ts中处理发送请求登录的url,以及保存loading、token等数据。
逻辑:登录页面实现跳转到首页是根据有误token来跳转到,token从redux中获取到。
在登录页面SignForm.tsx挂载到页面上时,会先判断是否登录(有无token),已经登录则跳转到首页(nav('/')),点击登录。
获取到token,跳转到首页。
2、使用到的UI组件:主要是表单组件。import { Button, Checkbox, Form, Input } from 'antd';
3、逻辑:采用的是jwt登录,发送登录请求,登陆成功后会返回一个token,这个token会在多处用到,所以token数据
保存在redux(使用react-tooltik)中,redux/userSlice/slice.ts中处理发送请求登录的url,以及保存loading、token等数据。
逻辑:登录页面实现跳转到首页是根据有误token来跳转到,token从redux中获取到。
在登录页面SignForm.tsx挂载到页面上时,会先判断是否登录(有无token),已经登录则跳转到首页(nav('/')),点击登录。
获取到token,跳转到首页。
搜索
1、输入想要旅游的地方等词,就可以点击搜索来查询。
2、使用到的组件:<Input.Search>
3、逻辑:携带搜索内容跳转到搜索页面,SearchPage.tsx,在SearchPage.tsx页面中:
使用useEffect来在该页面刚挂载上去以及在搜索词有变化重新搜索时发送请求获取搜索内容。
在点击分页器时传递{nextPage, pageSize, keywords}
发送异步action来获取搜索内容。搜索到的数据通过react-tooltik来保存
2、使用到的组件:<Input.Search>
3、逻辑:携带搜索内容跳转到搜索页面,SearchPage.tsx,在SearchPage.tsx页面中:
使用useEffect来在该页面刚挂载上去以及在搜索词有变化重新搜索时发送请求获取搜索内容。
在点击分页器时传递{nextPage, pageSize, keywords}
发送异步action来获取搜索内容。搜索到的数据通过react-tooltik来保存
旅游路线部分——组件<ProductCollection/>
(数据是请求网络得来,通过react-redux来保存,分发异步action)
(数据是请求网络得来,通过react-redux来保存,分发异步action)
1、首页挂载到页面上就开始获取分发action来获取旅游路线
2、该部分由组件<ProductCollection/>
3、逻辑:在HomePage.tsx通过react-redux来获取到redux中请求到的旅游路线productList,渲染到页面上。
点击某一条路线即可进入路线详情来查看。(携带该路线的id跳转(nav(`detail/${props.id}`))到详情页面DetailPage.tsx)
2、该部分由组件<ProductCollection/>
3、逻辑:在HomePage.tsx通过react-redux来获取到redux中请求到的旅游路线productList,渲染到页面上。
点击某一条路线即可进入路线详情来查看。(携带该路线的id跳转(nav(`detail/${props.id}`))到详情页面DetailPage.tsx)
路线详情DetailPage.tsx页面
逻辑:1.使用钩子useParams获取到路由中的params参数(路线的id)
2.路线详情数据通过redux-tooltik来保存,通过useSelector来获取state数据。
3.在DetailPage.tsx挂载到页面上后就分发异步action(slice中)来获取详情内容。(只在挂载的时候useEffect第二个参数为空)
4.点击加入购物车,先判断有没有登录(从token判断),没登录则提示登录,登陆了则分发添加到购物车的action(此action也保存咋redux-tooltik中)
2.路线详情数据通过redux-tooltik来保存,通过useSelector来获取state数据。
3.在DetailPage.tsx挂载到页面上后就分发异步action(slice中)来获取详情内容。(只在挂载的时候useEffect第二个参数为空)
4.点击加入购物车,先判断有没有登录(从token判断),没登录则提示登录,登陆了则分发添加到购物车的action(此action也保存咋redux-tooltik中)
登录状态与未登录状态的显示不同之处:
1、未登录:注册和登录。登录:购物车和注销
2、登录后显示用户名,未登录时没有
1、未登录:注册和登录。登录:购物车和注销
2、登录后显示用户名,未登录时没有
在入口App.tsx中就分发异步action来获取购物车数据
首页HomePage中的旅游推荐列表中的数据全部来自接口返回,通过react-redux来获取,并且是在action中异步获取(通过redux-thunk)
0 条评论
下一页