【发布时间】:2019-06-06 08:06:02
【问题描述】:
我的 onClick 事件处理程序向数据库字段添加/删除 id,并根据切换状态 true/false 更改按钮颜色。 虽然数据更新工作正常,但颜色状态会在页面刷新/视图更改时重置。 我想状态需要通过回调函数传递(在这种情况下,关系是子到父),但我不确定。
我认为有必要在 LocalStorage 中“保留”当前状态,但这并没有解决问题。虽然 LocalStorage 值 'true' 和 'false' 保持其状态(如控制台中显示的那样),但刷新页面时按钮的颜色仍会重置。
我附上了可能对评估问题很重要的代码部分:
// initialization of toggle state
let toggleClick = false;
...
this.state = {
fav: props.favorite
};
this.toggleClass = this.toggleClass.bind(this);
}
...
componentDidUpdate(prevProps) {
if (this.props.favorite !== prevProps.favorite) {
this.setState({
fav: this.props.favorite
});
}
}
toggleClass() {
toggleClick = true;
if (!this.state.fav) {
this.addId(this.props.movie._id);
} else {
this.removeId();
}
}
...
<span
onClick={() => this.toggleClass()}
className={this.state.fav ? "favme active" : "favme"}
>★</span>
【问题讨论】:
-
与您的问题无关,您无需再使用
constructor、this.state和bind(this)。你可以像state一样使用你的状态,并使用箭头函数,例如toggleClass = () => {...}而不是toggleClass(){...},因为它消除了bind(this)的必要性。使用 react 钩子,您甚至可以使用useState()将整个组件从类转换为函数式组件,这允许您在函数式组件中使用state。
标签: reactjs local-storage refresh setstate