js实现对sessionStorage中的值进行监听

js实现对sessionStorage中的值进行监听


最近在react项目的开发中遇到了需要对sessionStorage中的值进行监听的需求,在查阅的大量资源后,终于是实现了监听并同步更改在state中的效果,下面我把代码贴给大家!!!

我的需求是在input框获取焦点或失去焦点时控制另一个组件的显示隐藏

return (
      <div>
        {
          show === 2 ? <div className={style.box} ref={c => { this.box = c }}>
            <div className={style.close}></div>
          </div> : null
        }
        <input type="text" onFocus={this.onfocus} onBlur={this.onblur} />
      </div>
    )
  }

失去焦点和获得焦点时分别对sessionStorage进行操作

onfocus = () => {
    window.sessionStorage.setItem('input', 1)
  }

  onblur = () => {
    window.sessionStorage.setItem('input', 2)
  }

接下来就是对sessionStorage进行监听

componentDidMount() {
    const orignalSetItem = sessionStorage.setItem
    sessionStorage.setItem = function (key, newValue) {
      const setItemEvent = new Event("setItemEvent")
      setItemEvent.newValue = newValue
      window.dispatchEvent(setItemEvent)
      orignalSetItem.apply(this, arguments)
    }
    window.addEventListener("setItemEvent", (e) => {
      if ((e.key = "input")) {
        var _this = sessionStorage.getItem("input");
        if (_this !== e.newValue) {
          if (e.newValue) {
            this.setState({
              show: e.newValue
            })
          }
        }
      }
    })
  }

这样就可以实现sessionStorage中input值变化时,state中的show也可以跟着变化

上一篇:Jquery 实时搜索


下一篇:vue双向数据绑定原理