Эффективный setState свойств объекта? - PullRequest
0 голосов
/ 10 сентября 2018

Есть ли лучший способ написать это? Хотелось бы setState(ContentStore.getAll()) сделать то же самое? Я думаю, что это выглядит излишне грязным, и в любом случае упорядочить код для удобочитаемости было бы здорово!

class Element extends Component {
 ...
   setContentState = () => {
     const {
      basename,
      bookmark,
      contents,
   } = ContentStore.getAll();

   this.setState({
     basename,
     bookmark,
     contents,
   });
 ...
}

}

1 Ответ

0 голосов
/ 10 сентября 2018

Есть такая удобная функция:

const obj = {
  basename: 1,
  bookmark: 2,
  contents: 3,
  aaa: 4
}

const pick = (obj, keys) =>
  Object.assign({}, ...keys.map(key => ({ [key]: obj[key] })))

const picked = pick(obj, ['basename', 'bookmark', 'contents'])

console.log(picked)

Теперь вы можете:

const pick = (obj, keys) =>
  Object.assign({}, ...keys.map(key => ({ [key]: obj[key] })))

class Element extends Component {
 ...
   setContentState = () => {
    const data = ContentStore.getAll();
    const result = pick(data, ['basename', 'bookmark', 'contents'])

    this.setState(result);
    ...
  }
}

Или вы можете использовать функцию выбора из Lodash или Подчеркивание .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...