sessionStorage不会更新页面

时间:2020-01-21 12:04:07

标签: javascript reactjs local-storage session-storage

我正在尝试在sessionStorage中使用“ isCollapse”变量来减少导航栏。 通过单击按钮,我的sessionStorage发生了变化,但是渲染没有更新。

JSX代码

{
    sessionStorage.getItem("collapse") === "true" ?
    <div className="LeftMenu" style={{
        width: 45,
        float: "left",
        height: "100%",
        borderRight: "1px solid #dfe4e8",
        textAlign: "left",
    }}>
        <div className="tableElement">
            <FontAwesomeIcon icon={faHome} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faTasks} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faUsers} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faTh} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faArchive} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faCopy} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faNewspaper} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faDownload} className="icon" />
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faFingerprint} className="icon" />
        </div>

    </div>
    :
    <div className="LeftMenu" style={{
        width: "12%",
        float: "left",
        height: "100%",
        borderRight: "1px solid #dfe4e8",
        textAlign: "left",
        minWidth: 200
    }}>
        <div className="tableElement">
            <FontAwesomeIcon icon={faHome} className="icon" /> Home
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faTasks} className="icon" /> Organisations
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faUsers} className="icon" /> Users
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faTh} className="icon" /> Templates Library
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faArchive} className="icon" /> Audit Trail
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faCopy} className="icon" /> Data Copy
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faNewspaper} className="icon" /> VAT Reporting
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faDownload} className="icon" /> Download add-in
        </div>
        <div className="tableElement">
            <FontAwesomeIcon icon={faFingerprint} className="icon" /> Account
        </div>
    </div>
}

我不知道这是否是最好的方法,但是如果我将sessionStorage设置为true并手动刷新,它将起作用。

编辑1:我试图像这样使用ComponentDidMount函数:

componentDidMount = () => {
    this.setState({
        isCollapse: sessionStorage.getItem("collapse")
    }, () => { console.log(this.state.isCollapse) })
}

但它也不起作用

编辑2:我没有指定,但是我的onClick函数和渲染不在保存文件中,我有一个按钮可以减少其他组件中的侧边栏,并且我想保留这个我所有网站的更改,这就是为什么我使用sessionStorage

2 个答案:

答案 0 :(得分:0)

您可以使用reducer或state来存储更改,因为状态或props发生更改时将进行渲染。 sessionStorage的更改不会触发渲染。请注意,对于此要求,使用会话存储是一种不好的做法。

//initialize a state

state = {
collapse:false
}

//set state on click
onClick={() => this.setState({collapse:!this.state.collapse})

//use state to show and hide

{this.state.collapse && <...content/>}

如果使用减速器,请执行以下步骤

1.create an action creators
2.dispatch an action
3.set state in store
4.connect state to the component diretly or by passing props

答案 1 :(得分:0)

render()方法将呈现此代码,但不会更新您需要使用setState的状态,您可以创建一个函数,该函数将检查isCollapse为true的先前状态,将其设置为false以及是否将其设置为set设置为false会使它变为true,因此它将用作触发按钮,根据先前的值使isCollapse为true或false。

changeIsCollapse() {
  if(sessionStorage.getItem('collapse') === 'true')
  { 
   this.setState({ 
    isCollapse: false
   }) 
  } else { 
   this.setState({ 
    isCollapse: true
  }) 
 }
}

在按钮的onClick内部,您可以调用此功能

onClick={this.changeIsCollapse.bind(this)}