有没有一种方法可以创建通用方法来减少状态类似操作的代码量?

时间:2018-09-18 17:39:16

标签: reactjs dry

我是JS / React / Redux的初学者。是否有一种动态/参数化方法来调用带有参数的相似方法,而不是重复代码?

resetSelectedState() {
    const geoElement = Object.assign([], this.state.states); // create new copy to avoid mutation
    geoElement.forEach((a) => a.isSelected = false);
    this.setState({ states: geoElement });
}

resetSelectedCountry() {
    const geoElement = Object.assign([], this.state.countries); // create new copy to avoid mutation
    geoElement.forEach((a) => a.isSelected = false);
    this.setState({ countries: geoElement });
}

resetSelectedContinent() {
    const geoElement = Object.assign([], this.state.continents); // create new copy to avoid mutation
    geoElement.forEach((a) => a.isSelected = false);
    this.setState({ continents: geoElement });
}

在C#中,我将使用带有类型对象的泛型方法对此进行设置,但是我想知道在JS中是否可行?

2 个答案:

答案 0 :(得分:2)

是的。由于唯一的区别是您所访问的对象处于状态,因此您可以将其传入,然后将其代码干燥。

doSomething(type) {
    const geoElement = Object.assign([], this.state[type]); // create new copy to avoid mutation
    geoElement.forEach((a) => a.isSelected = false);
    this.setState({ [type]: geoElement });
}

答案 1 :(得分:2)

我将有一个通用的方法,该方法将迭代并设置和使用computed property name来避免重复。

resetSelectedState() {
    this.reset('states');
} 

resetSelectedCountry() {
  this.reset('countries');
}

resetSelectedContinent() {
  this.reset('continents');
}

reset(property) {
  const geoElement = [...this.state[property]];
    geoElement.forEach((a) => a.isSelected = false);

  this.setState({
    [property]: geoElement
  });
}