销毁 array.map() 中的对象属性并将对象保留为参数

IT技术 reactjs object ecmascript-6 destructuring
2021-05-25 14:27:27

是否可以在将对象作为参数保留在函数内部的同时破坏对象的属性array.map()

基于这个问题,我尝试了以下但失败了(解析错误)

  this.state.files.map(((file, {param1, param2} = file), i) => (
    <div key={i}>
      <p>{param1}</p>
      <button onClick={this.editFile(file)} />
    </div>
  )
2个回答

实现此目的的一种方法是使用默认参数语法,如下所示:

const test = (input, { a, b } = input) => [ a, b ]
console.log(test({ a: 1, b: 2 })) // [ 1, 2 ]

上面的函数没有传递第二个参数,所以第二个参数默认为第一个参数,那么就销毁了。

该参数只能在声明后使用,所以这不起作用:

const test = ({ a, b } = input, input) => [ a, b ]
console.log(test(undefined, { a: 1, b: 2 }))
// Uncaught ReferenceError: input is not defined at test

这也只能在没有传递参数的情况下起作用,因此在传递回调的情况下Array#map,您必须声明所有传递的参数,以便您可以声明默认参数。

使用您的示例,它看起来像这样:

this.state.files.map((file, i, files, { param1, param2 } = file) => (
  <div key={i}>
    <p>{param1}</p>
    <button onClick={this.editFile(file)} />
  </div>
))

而不是使用 lambda 组件,使它成为一个像这样的功能块

  this.state.files.map(((file, i) => {
    const {param1, param2} = file;
    return (
      <div key={i}>
        <p>{param1}</p>
        <button onClick={() => this.editFile(file)} />
      </div>
    )}
  )