另:记得在index.js中引入rootReducer
react-redux的引入
在index.js中引入react-redux
import { Provider } from ‘react-redux’
使用Provider包裹我们的主组件App,连接React和Redux
ReactDOM.render(
<React.StrictMode>
</React.StrictMode>,
document.getElementById(‘root’)
);
mapStateToProps
Home页的改造
引入react-redux的connect方法,让store与reatc真正连接
import { connect } from ‘react-redux’
将state映射成props,传入connect,返回一个高阶组件,增强Home组件,使它能够与redux交互
// 将state映射成props
const mapStateToProps = (state) => {
return {
posts:state.posts
}
}
// connect接收mapStateToProps,返回一个高阶组件,让Home组件能够与redux交互,拿到state数据
export default connect(mapStateToProps)(Home)
将Home组件render函数中的this.state.props改为this.props
// 解构获得posts
// const { posts } = this.state;
// 使用redux传递过来的props
const {posts} = this.props
效果:Home页面可以展示store中的三条记录
博文详情页Post的改造
原本单篇博客的详情页是通过axios再次请求的,改为向redux请求数据
注释掉state和钩子函数请求数据的代码,引入react-redux
import { connect } from ‘react-redux’
根据post_id在state中寻找这篇博文的详情数据并传递给Post
const mapStateToProps = (state, ownProps)=>{
let id = ownProps.match.params.post_id;
return {
post:state.posts.find(post =>String(post.id) === id)
}
}
export default connect(mapStateToProps)(Post)
把render函数中的this.state.props改为this.props
// 解构
// const {post} = this.state;
const {post} = this.props;
效果:
mapDispatchToProps vs dispatch派发action
设置mapDispatchToProps,派发action
// 派发action 根据id删除post
const mapDispatchToProps = (dispatch) => {
return {
deletePost: (id) => dispatch({ type: ‘DELETE_POST’, id: id })
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Post)
添加一个删除按钮,并设置点击事件,当点击按钮,就触发dispatch分发,删除该条博文
在博文的p标签后面加这个按钮
删除博客
定义点击事件
//删除博客按钮
handleClick = ()=>{
this.props.deletePost(this.props.post.id);
}
设置reducer,当action类型为DELETE_POST时,从state中删除这条博文的记录
// 设置rootReducer
const rootReducer = (state = initState, action)=>{
if (action.type === ‘DELETE_POST’){
let newPosts = state.posts.filter(post=>{
return post.id !== action.id
})
return {
…state,
posts:newPosts
}
}
return state;
}
设置重定向,当删除某条博文后,跳转到home页面
在删除按钮的点击事件中设置
//删除博客按钮
handleClick = ()=>{
this.props.deletePost(this.props.post.id);
// 删除之后跳转到home页面
this.props.history.push(‘/’)
}
效果:
action生成器
为了提高代码的复用性、简洁性、组件化,将post相关的action设置抽离出一个文件
在src下新建一个文件夹actions,里面新建一个文件postActions.js
export const deletePost = (id)=>{
type:“DELETE_POST”,
id
}
在Post.js文件中引入并使用
引入:
import { deletePost } from ‘…/action/postActions’
使用:
const mapDispatchToProps = (dispatch) => {
return {
// deletePost: (id) => dispatch({ type: ‘DELETE_POST’, id: id })
deletePost: (id) => dispatch(deletePost(id))
}
}
Post.js完整代码:
// import axios from “axios”;
import React, { Component } from “react”;
import { connect } from ‘react-redux’
import { deletePost } from ‘…/action/postActions’
class Post extends Component {
// // 初始化state,存储路由参数post_id,确定id可以获得之后,直接存储具体博文post
// state = {
// // id:null,
// post:null
// }
// // 在挂载完成时向服务器请求数据,先看看Route传递过来的props
// componentDidMount(){
// let id = this.props.match.params.post_id;
// axios.get(“http://jsonplaceholder.typicode.com/posts/” + id).then(res=>{
// // console.log(res);
// this.setState({
// post:res.data
// })
// })
// // console.log(this.props);
// // this.setState({
// // id
// // })
// }
// 数据从redux更新
//删除博客按钮
handleClick = () => {
this.props.deletePost(this.props.post.id);
// 删除之后跳转到home页面
this.props.history.push(‘/’)
}
render() {
// 解构
// const {post} = this.state;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://img-blog.csdnimg.cn/img_convert/e7c3772d0804a4405454c22ee6086e67.jpeg)
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。
小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
[外链图片转存中…(img-RygCxodi-1712951766204)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://img-blog.csdnimg.cn/img_convert/e7c3772d0804a4405454c22ee6086e67.jpeg)
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。