【问题标题】:const function = (event) => (parameter) =>{}常量函数 = (事件) => (参数) =>{}
【发布时间】:2022-11-25 18:09:45
【问题描述】:

正如标题所暗示的,我有点无法找出这个函数的正确语法。

目前,我在地图上有一个事件侦听器,当单击地图时会触发一个函数,如下所示:

map.on("click",(event)=>addMarker(event,parameter))

这一切都很好,但我想将触发的功能组合成一个完整的功能。我知道可以这样做,这样我就不必在 addMarker 函数之外定义事件。相反,我想在 addMarker 函数中定义事件,这样我只有单击地图后才会触发的单个函数。

以下是我要实现的目标(这是错误的语法):

map.on("click",addMarker(map))

addMarker 函数是:

const addMarker = (event) => (parameter) =>{
  new mapboxgl.addMarker({}).setLngLat(coords).addTo(parameter)
}

任何人都可以帮助建议的 addMarker 函数的正确语法吗?当我这样做时,我收到错误“无法读取未定义的属性(阅读:“lng”)”

【问题讨论】:

  • 为什么要更改该语法?它是一个函数,它返回一个做某事的函数。你能改变addMarker函数的定义吗?因为如果你可以,那么你可以用它做任何你想做的事。现在它必须接受返回一个函数的函数。
  • 它应该是(parameter) => (event) =>而不是相反(假设您希望mapparameter并且传递给回调的参数.on()event(通常是)。另外,请考虑将您的问题标题更新为更易于搜索的内容,以便未来有相同问题的读者可以搜索

标签: javascript reactjs angular es6-modules


【解决方案1】:

您需要将 Function 作为回调传递给事件处理程序。因此,您可以按如下方式交换addMarker 中的参数。这样,您将返回一个函数,该函数返回一个函数,其中 map 参数将为该实例固定:

const addMarker = (parameter) => (event) =>{
  new mapboxgl.addMarker({}).setLngLat(coords).addTo(parameter)
}

【讨论】:

    【解决方案2】:

    这段代码:

    const addMarker = (event) => (parameter) =>{
      new mapboxgl.addMarker({}).setLngLat(coords).addTo(parameter)
    }
    

    主要等同于:

    function addMarker(event) {
      return function (parameter) {
         new mapboxgl.addMarker({}).setLngLat(coords).addTo(parameter)
      }
    }
    

    为了使柯里化正常工作,您希望以这种方式进行:

    function addMarker(parameter) {
      return function (event) {
         new mapboxgl.addMarker({}).setLngLat(coords).addTo(parameter)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多