react-global-shared用途和使用

本文介绍了react-global-shared的基本使用,注意事项及api使用

简介

用于管理react全局状态,调用简单,用时初始化,兼容hook,能够在纯function中操做状态react

源码

githubgit

Api

  • connect:高阶组件用于给包裹的Component注入props,返回值是React.Compoent。
  • useGlobalState: 想要达到的目的与connect同样,只是在hook中没什么必要用高阶组件,返回值是value。

Api使用示例

connect (Component, ...stateObj)

为了和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
复制代码

useGlobalState (stateObj)

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

常见问题

修改了this.state并无触发改变:

考虑到性能问题这里只监听了一层数据,因此推荐修改state使用immutability-helper修改数据性能

相关文章
相关标签/搜索