之前写的一个react项目,需要在里面使用Redux,记录一下实现的步骤
要在项目中使用,所以先来安装一下redux 和 react-redux
cnpm i -D redux react-r
这里是使用redux完成这个项目中菜单的一些功能,下面列举的新建文件相关的功能在之前文章有说明,这里就不叙述了
在 src 目录下新建 store 文件夹用作仓库,
在store下新建文件:
1.新建contants.js进行定义一个名字
export const SWITCH_MENU = 'SWITCH_MENU'
2.新建index.js在里面进行创建:
import { createStore } from 'redux'
import reducer from './reducer'
const store = createStore(reducer)
export default store
3.新建action.js
import { SWITCH_MENU } from './contants'
export const switchMenuAction = menuName => ({
type: SWITCH_MENU,
menuName
})
4.新建reducer.js建立连接
import { SWITCH_MENU } from './contants'
const initState = {
menuName: '首页'
}
const reducer = (state = initState, action) => {
switch(action.type) {
case SWITCH_MENU:
return {...state, menuName: action.menuName}
default:
return state
}
}
export default reducer
想要全局使用,就需要使用Provider组件进行一个包裹
来到根目录src下的index.js文件:
先引入Provider和需要用到的store
import { Provider } from 'react-redux'
import store from './store'
然后使用 Provider 进行包裹,并将store传进去:
ReactDOM.render(
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
来到nav文件夹下的index.js文件
引入 connect 和 switchMenuAction
import { connect } from 'react-redux'
import { switchMenuAction } from '../../store/action'
在最下面调用connect,然后将Index传入进去(Index是这里使用的组件名):
export default connect()(Index)
定义一个switchMenu函数:
调用dispatch在里面定义switchMenuAction并传入menuName,因为我们最终就是通过menuName进行展示
switchMenu(menuName) {
const { dispatch } = this.props
dispatch(switchMenuAction(menuName))
}
然后就直接在渲染的menu.item中定义点击事件,这样就能进行菜单的切换:
getMenuItem = (data) => {
// console.log(data)
return data.map(item => {
if (item.children) {
return <SubMenu key={item.key} title={item.title}>
{this.getMenuItem(item.children)}
</SubMenu>
} else {
return <Menu.Item key={item.key} title={item.title}
onClick={e => this.switchMenu(item.title)}>
<Link to={item.key}>{item.title}</Link>
</Menu.Item>
}
})
}
好了本篇文章就到此结束了,主要讲了如何在已有项目中集成使用redux。大概总结下就以下步骤:
如果对redux基础不太清楚的可以看看之前的几篇文章:
Redux的基础用法详解(纯函数的概念)
在react项目实战中使用Redux(案例讲解)