【发布时间】:2017-11-13 06:57:21
【问题描述】:
我在使用来自 React 的 a-tag 和 input type=checkbox 时遇到了一个特殊的问题。问题是,如果我直接点击复选框而不是 a-tag,复选框将无法正确重新呈现,但我的状态已更新。
示例:给定下面的代码,我渲染组件并直接单击复选框。在这种情况下,showMap 将设置为 false,因为我们在构造函数中将其设置为 true,但在 html 视图中仍会选中复选框。但是,如果我单击 a-tag 而不是直接单击复选框,则状态 showMap 和视图都会正确更新。
我可以通过不在toggleCheckbox 中调用event.preventDefault(); 来使其工作,但如果我这样做,如果我点击a-tag,应用程序将滚动到页面顶部。
例子:
https://codesandbox.io/s/w2x8vqq8xl
代码:
import React from "react";
import { render } from "react-dom";
const styles = {
fontFamily: "sans-serif",
textAlign: "center",
//marginTop: "1000px"
};
class Menu extends React.Component {
constructor(props) {
super(props);
this.state = {
showMap: true
};
}
toggleCheckbox = event => {
this.setState({ showMap: !this.state.showMap });
event.preventDefault();
};
render() {
return (
<div>
<h1>{this.state.showMap ? "Show" : "hide"}</h1>
<a href="#" role="button" onClick={this.toggleCheckbox}>
<input
type="checkbox"
title="test"
name="showMap"
checked={this.state.showMap}
readOnly
/>
Show map
</a>
</div>
);
}
}
const App = () => (
<div style={styles}>
<Menu />
</div>
);
render(<App />, document.getElementById("root"));
更新:
用 React 创建了一个问题。
【问题讨论】:
-
它看起来完全像一个 reactjs 错误。如果您举报,请在问题中添加链接。
-
@zerkms 我怀疑这一点。创建问题并使用链接更新问题。
标签: javascript html reactjs typescript typescript2.0