Уничтожить свойства объекта в array.map () и сохранить объект в качестве параметра - PullRequest
0 голосов
/ 08 января 2019

Можно ли разрушить свойства объекта, сохранив объект в качестве параметра внутри функции array.map()?

На основании этого вопроса Я попробовал следующее, но не смог (ошибка синтаксического анализа)

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

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Один из способов добиться этого - использовать синтаксис параметров по умолчанию , например:

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>
))
0 голосов
/ 08 января 2019

Вместо использования лямбда-компонента сделайте его функциональным блоком, таким образом

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