gpt4 book ai didi

javascript - 如何在 react.js 中监听 localstorage

转载 作者:数据小太阳 更新时间:2023-10-29 05:49:21 43 4
gpt4 key购买 nike

我在使用从本地存储中的数组获取数据的组件时遇到问题。它在页面加载时获取初始数据,但是当 localstorage 更改时如何更新?

import React, {Component} from 'react'; 
class MovieList extends Component {
constructor(props){
super(props)
this.state = {
filmList: []
}
}
componentWillMount(){
var film = [],
keys = Object.keys(localStorage),
i = keys.length;
while ( i-- ) {
film.push( localStorage.getItem(keys[i]))
}
this.setState({filmList: film})

};

render(){
return(
<ul>
<li>{this.state.filmlist}</li>
</ul>

);
}

}

export default MovieList;

最佳答案

根据 Mozilla 的 Web API 文档,有一个 StorageEvent 会在 Storage 对象发生更改时触发。

我在我的应用程序中创建了一个警报组件,只要对特定的 localStorage 项目进行了更改,该组件就会关闭。我会添加一个代码片段供您运行,但由于跨源问题,您无法通过它访问 localStorage。

class Alert extends React.Component {
constructor(props) {
super(props)
this.agree = this.agree.bind(this)
this.disagree = this.disagree.bind(this)
this.localStorageUpdated = this.localStorageUpdated.bind(this)
this.state = {
status: null
}
}
componentDidMount() {
if (typeof window !== 'undefined') {
this.setState({status: localStorage.getItem('localstorage-status') ? true : false})

window.addEventListener('storage', this.localStorageUpdated)
}
}
componentWillUnmount(){
if (typeof window !== 'undefined') {
window.removeEventListener('storage', this.localStorageUpdated)
}
}
agree(){
localStorage.setItem('localstorage-status', true)
this.updateState(true)
}
disagree(){
localStorage.setItem('localstorage-status', false)
this.updateState(false)
}
localStorageUpdated(){
if (!localStorage.getItem('localstorage-status')) {
this.updateState(false)
}
else if (!this.state.status) {
this.updateState(true)
}
}
updateState(value){
this.setState({status:value})
}
render () {
return( !this.state.status ?
<div class="alert-wrapper">
<h3>The Good Stuff</h3>
<p>Blah blah blah</p>
<div class="alert-button-wrap">
<button onClick={this.disagree}>Disagree</button>
<button onClick={this.agree}>Agree</button>
</div>
</div>
: null )
}
}

关于javascript - 如何在 react.js 中监听 localstorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313372/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com