- 安装
npm i redux
- 建一个专门全局管理的redux文件,里建store.js
import {createStore} from 'redux'
const reducer = (prevState={
show:true,
},action)=>{
console.log(action)
let newState = {...prevState}
switch(action.type){
case "kerwinhide-tabbar":
newState.show = false
return newState
case "kerwinshow-tabbar":
newState.show = true
return newState
default:
return prevState
}
}
const store = createStore(reducer);
export default store
- 在APP.js里
import React, { Component } from 'react'
import MRouter from './router/IndexRouter'
import Tabbar from './components/Tabbar'
import './views/css/App.css'
import store from './redux/store'
export default class App extends Component {
state = {
isShow:store.getState()
}
componentDidMount() {
store.subscribe(()=>{
console.log("app 中订阅",store.getState())
this.setState({
isShow:store.getState().show
})
})
}
render() {
return (
<div>
{/* 其他的内容 */}
<MRouter>
{/* 15 判断isShow是否是真来显示或隐藏这个组件 */}
{this.state.isShow && <Tabbar></Tabbar>}
</MRouter>
</div>
)
}
}
- 在Detail.js组件里
import React,{useEffect} from 'react'
import { show,hide } from '../redux/actionCreator/TabbarActionCreator'
import store from '../redux/store'
export default function Detail(props) {
console.log(props.match.params.myid,"利用id去后端拿数据。")
useEffect(() => {
store.dispatch(hide())
return () => {
console.log("destroy")
store.dispatch(show() )
}
}, [])
return (
<div>
deteail
</div>
)
}
- show()和hide()函数内容是在TabbarActionCreator里面,路径../redux/actionCreator/TabbarActionCreator'
function hide(){
return {
// 必须一个type属性,后面随便写
type:"kerwinhide-tabbar"
}
}
function show(){
return {
type:"kerwinshow-tabbar"
}
}
export {show,hide}