当前位置: 首页 > 知识库问答 >
问题:

如何在渲染中从单击事件调用方法?

公羊浩气
2023-03-14

我正在使用状态在图标的单击事件中打开和关闭一个层。当我从单击处理程序调用\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>
    );
  }
};

共有3个答案

酆华皓
2023-03-14

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>
    );
  }
};
冷吉星
2023-03-14

我假设您不想在render()中调用\u onOpenLayer()方法,而是在每次单击图标时调用。

所以不要在渲染中调用该方法:

onClick={this.\u onOpenLayer()}

您只需将函数传递给onClickprop即可

onClick={this.\u onOpenLayer.bind(this)}

法弘亮
2023-03-14

确保图标是可点击的(检查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。 但是每次它给我 问题答案: 您需要使用超时来检查第一次点击后是否还有另一次点击。 这是窍门: 用法: