我有这个工作函数,有条件地setState一个searchMode属性,但是我必须摆脱嵌套的三元表达式,该怎么办?

  updateSearchMode = () => {
    this.setState(prevState => ({
      searchMode:
        prevState.contactsInfo.length === 0
          ? searchModes.noResultsPanel
          : prevState.contactsInfo.length === 0 && prevState.searchString
          ? searchModes.advisoryPanels
          : searchModes.resultsPanel,
    }));
  };

最佳答案

您可以用正则if替换该三元表达式:

updateSearchMode = () => {
  this.setState(prevState => {
    if (!prevState.contactsInfo.length && prevState.searchString)
      return ({searchMode: searchModes.advisoryPanels});
    if (!prevState.contactsInfo.length)
      return ({searchMode: searchModes.noResultsPanel});
    return ({searchMode: searchModes.resultsPanel});
  });
};


请注意,我稍微改变了顺序,因为第二种情况永远无法实现,因为第一种情况始终会首先验证。

09-25 18:04