用于管理react全局状态,调用简单,用时初始化,兼容hook,能够在纯function中操做状态react
githubgit
为了和hooks作区分这里组件全用class componentgithub
const menuState = {
name: "menus",
state: [ {name: "首页"}, {name: "沸点"}, {name: "话题"} ],
add: function(menu){
this.state = [menu, ...this.state]
}
}
class TopMenu extends React.Component{
render(){
const menus = this.props.menus
return <ul>
{menus.map(menu => <li>{menu.name}</li>)}
</ul>
}
}
class FooterMenu extends React.Component{
render(){
const menus = this.props.menus
return <ul>
{menus.map(menu => <li>{menu.name}</li>)}
</ul>
}
}
const CTopMenu = connect(TopMenu, menuState)
const CFooterMenu = connect(LeftMenu, menuState)
class Main extends React.Component{
render(){
return <div>
<button onClick={menuState.add({name:"活动"})}>add Menu</button>
<CTopMenu />
<CFooterMenu />
</div>
}
}
export default Main
复制代码
hooks中绑定api
const menuState = {
name: "menus",
state: [ {name: "首页"}, {name: "沸点"}, {name: "话题"} ],
add: function(menu){
this.state = [menu, ...this.state]
}
}
const TopMenu = () => {
const menus = useGlobalState(menuState)
return <ul>
{menus.map(menu => <li>{menu.name}</li>)}
</ul>
}
const LeftMenu = () => {
const menus = useGlobalState(menuState)
return <ul>
{menus.map(menu => <li>{menu.name}</li>)}
</ul>
}
const Main = () => {
return <div>
<button onClick={menuState.add({name:"活动"})}>add Menu</button>
<TopMenu />
<LeftMenu />
</div>
}
复制代码
| 这两个示例实现的是一样的功能,多个组件共享状态,任意位置调用可触发render。
useGlobalState和connect,绑定数据的方式不一样,可是调用的方法是同样的。bash
考虑到性能问题这里只监听了一层数据,因此推荐修改state使用immutability-helper修改数据性能