对象属性的高效setState?

问题描述 投票:0回答:1

有没有更好的方法来写这个?就像setState(ContentStore.getAll())做同样的事情?我认为这看起来不必要地混乱,无论如何简化代码的易读性将是巨大的!

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

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

}

javascript reactjs ecmascript-6
1个回答
1
投票

有这样一个方便的功能:

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);
    ...
  }
}

或者你可以使用LodashUnderscore的pick功能。

© www.soinside.com 2019 - 2024. All rights reserved.