Как я могу сделать деструктурирующее задание в Reactjs? - PullRequest
0 голосов
/ 30 января 2020

У меня есть следующая функция.

 returnStateElement = (...elements) => {
    const copy = Object.assign({}, this.state);
    return elements.reduce((obj, key) => ({ ...obj, [key]: copy[key] }), {});
  };

Работает:

f = () => {
const dataSender = this.returnStateElement('email', 'password');
let { email, password } = dataSender;
console.log(dataSender,email,password);
}

Не работает:

f2 = () => {
const { email, password } = dataSender = this.returnStateElement('email', 'password');
console.log(dataSender,email,password);
}

Есть ли способ сделать более компактным тип назначения, например, f2 ()?

Ответы [ 3 ]

0 голосов
/ 30 января 2020

f2 = () => {
  const { email, password, ...rest } = this.returnStateElement('email', 'password');
  console.log(email,password, rest);
  // you can combine all like
  console.log({...rest, email, password });
}
0 голосов
/ 30 января 2020

функцию f2 определяют ниже:

f2 = () => {
   let dataSender={};
   const { email, password } = dataSender = this.returnStateElement('email', 'password');
   console.log(dataSender,email,password);
  }
0 голосов
/ 30 января 2020

Следующее должно работать, вам не нужно присваивать результаты промежуточной переменной, вам просто нужно указать точные имена в возвращаемом объекте

f2 = () => {
const { email, password } = this.returnStateElement('email', 'password');
console.log(dataSender,email,password);
}

Пример

const foo = () => {
    return {
    'a': '1',
    'b': '2'
  }
}

const bar = () => {
    const { a, b } = foo();
  console.log(a)
  console.log(b)
}

bar();
// Logs 1, 2

...