我正在使用状态在图标的单击事件中打开和关闭一个层。当我从单击处理程序调用\u onOpenLayer()
时,什么都没有发生。
以前,我直接从图标单击onClark={this._onOpenLayer()}
调用该方法,这确实打开了层,但如果由于不允许调用rednder()中的方法而冻结了用户界面。
所以我找到了一个解决方案,在调用打开之前添加一个lambda,如下所示。但是点击图标不会打开这个更改的图层:
onClick={() => this._onOpenLayer()}
为了进一步调试,我放置了一个控制台。登录\u onOpenLayer()
方法,我可以看到它没有被点击图标。
问题:
如何从render方法中的单击事件调用方法?
这是我渲染的类的要点。_onOpenLayer()将openLayer状态设置为true,然后打开层元素:
class Page1 extends Component {
constructor(props) {
super(props);
this.state = {
openLayer: false,
};
}
_onOpenLayer() {
console.log("fooo");
this.setState({
openLayer: true
});
}
_onCloseLayer() {
this.setState({
openLayer: false
});
}
render() {
let layerNode;
if (this.state.openLayer) {
layerNode = (
<Layer flush={true} closer={true} onClose={() => this._onCloseLayer()} align='right'>
</Layer>
);
}
return (
<Section pad="small" full="vertical" flex={true}>
<div>
<Box direction="row" align="center" justify="end" tag="aside" pad={{horizontal: "large" , between: "small"}} >
<Filter size="medium" colorIndex="brand" onClick={() => this._onOpenLayer()} />
</Box>
{layerNode}
</Section>
);
}
};
lambda由es2015/es6使用,您需要使用polyfill或babel。。。
class Page1 extends Component {
constructor(props) {
super(props);
this.state = {
openLayer: false,
};
}
_onOpenLayer() {
console.log("fooo");
this.setState({
openLayer: true
});
}
_onCloseLayer() {
this.setState({
openLayer: false
});
}
render() {
let layerNode;
if (this.state.openLayer) {
layerNode = (
<Layer flush={true} closer={true} onClose={this._onCloseLayer} align='right'>
</Layer>
);
}
return (
<Section pad="small" full="vertical" flex={true}>
<div>
<Box direction="row" align="center" justify="end" tag="aside" pad={{horizontal: "large" , between: "small"}} >
<Filter size="medium" colorIndex="brand" onClick={this._onOpenLayer} />
</Box>
{layerNode}
</Section>
);
}
};
我假设您不想在render()中调用\u onOpenLayer()
方法,而是在每次单击图标时调用。
所以不要在渲染中调用该方法:
onClick={this.\u onOpenLayer()}
您只需将函数传递给onClick
prop即可
onClick={this.\u onOpenLayer.bind(this)}
确保图标是可点击的(检查css中的指针事件
),并确保触发onClark
。
否则试试这个......
class Page1 extends Component {
constructor(props) {
super(props);
this.state = {
openLayer: false,
};
this._onOpenLayer = this._onOpenLayer.bind(this)
this._onCloseLayer = this._onCloseLayer.bind(this)
}
_onOpenLayer() {
console.log("fooo");
this.setState({
openLayer: true
});
}
_onCloseLayer() {
this.setState({
openLayer: false
});
}
render() {
let layerNode;
if (this.state.openLayer) {
layerNode = (
<Layer flush={true} closer={true} onClose={this._onCloseLayer} align='right'>
</Layer>
);
}
return (
<Section pad="small" full="vertical" flex={true}>
<div>
<Box direction="row" align="center" justify="end" tag="aside" pad={{horizontal: "large" , between: "small"}} >
<Filter size="medium" colorIndex="brand" onClick={this._onOpenLayer} />
</Box>
{layerNode}
</Section>
);
}
};
问题内容: 我正在尝试使用setState()方法将容器中的React状态变量重置为默认值。但是出现以下错误 最后:超出最大调用堆栈大小。 我的代码如下: 当Redux状态的变量为true时,我正在调用resetMsg()。 我在其中调用resetMsg的代码(resetMessages的值最初为false,当它为true时,我需要重置React状态): 问题答案: 您可能要研究功能。根据官方文档
我有一个希望异步运行的I/O绑定方法。 在帮助文档中,它提到我应该使用异步和等待没有task.run 如何从winforms按钮单击事件中执行此操作? 我试过了
我有谷歌地图与集群的多个标记。在标记点击时,我显示信息窗口,但是当我点击标记时,整个地图标记和集群都被重新渲染,这使得页面缓慢而烦人。 以下是我的代码: 参考:https://tomchentw.github.io/react-google-maps/#markerclusterer
问题内容: 我想在按钮单击时使用条件渲染组件,我编写了以下代码,但不起作用,当我单击漫画时,应加载漫画组件,而当我单击竞赛按钮时,应加载竞赛组件,有人可以帮忙吗下面是代码和CSS文件 问题答案: 您不退还组件,请尝试以下操作:
问题内容: 单击按钮后,我将尝试呈现一个段落。 这是我的代码。 在这里,我试图在单击按钮时呈现“你好朋友”。但是没有用。 问题答案: 这不是正确的方法,因为它是一个事件处理程序,它将不呈现元素,您需要的是“元素的条件呈现”。 有关详细信息,请参阅“文档”。 条件渲染 。 脚步: 1-使用具有初始值的状态变量。 2-点击按钮将值更新为。 3-使用该状态值进行条件渲染。 工作代码:
问题内容: 我有一个id为id的按钮。我将此元素附加了两个jQuery事件 1。 2。 但是每次它给我 问题答案: 您需要使用超时来检查第一次点击后是否还有另一次点击。 这是窍门: 用法: