javascript - 在 Safari 中状态更改后,React 组件不会重新呈现
问题描述
在我在 Gatsby 中构建的 React 应用程序中,我的表单包含以下代码片段:
<label id="politykaModal" onClick={e => this.handleChangeRatio(e)}>
<button id="politykaModal" name="polityka-prywatnosci" className={this.state.politykaModalError ? "redBorder" : ""}>
<div id="politykaModal" className={this.state.politykaModal ? "checked" : ""}/>
</button>
Accept privacy policy
</label>
当用户单击标签时,假设更改内部 div 的类.checked
(更改内部 div 的背景颜色)。它在除 Safari 之外的所有浏览器中都能正常工作。
这是我的handleChangeRatio()
方法:
handleChangeRatio(e) {
e.preventDefault();
let name = e.target.id;
if(name === "politykaModal") {
this.setState((prevState) => {
return ({
politykaModal: !prevState.politykaModal
});
});
}
}
有趣的是状态正在改变,但类没有(内部 div 的背景颜色保持不变)。也许问题在于重新渲染组件,但为什么它在其他浏览器中运行良好?
提前致谢。
解决方案
我认为您不需要使用prevState
,您可以在状态之间切换:尝试:
if(name === "politykaModal") {
this.setState({politykaModal: !this.state.politykalModal)
}
推荐阅读
- javascript - 在 Nodejs 项目中使用时,Vue 前端停止正常运行
- excel - 在我的工作簿中的几张纸上执行平均和总和计算
- statistics - 我试图检查 sympy stats 中某些事件的概率。没用
- spring - Spring MVC 表单不采用对象路径
- react-native - React Native 处理 html p 标签
- c# - 类型或命名空间定义,或文件结尾应在最后一行而不是 }
- swift - 未找到 -lGoogleUtilities-library 的库
- android - 如何将两个文本保持在画布的中心?
- erlang - ejabberd 如何处理消息排序和传递?
- javascript - 如何弯曲svg点组